新手破解练习Crackme160之072 - fireworx.3

  1. 去NAG, 把主界面当成NAG界面干掉它, 直接让程序显示注册界面, Delphi4-5写的, 反编译出来的代码可知, 注册界面不在代码开始创建的, 是点击注册按钮后才创建的, 那我们就在显示主界面之前直接跳转到注册界面去, OD载入程序, F8单步运行, 执行到00445B33处时程序即将要显示主界面TForm1了, 这时我们F7进入方法, 继续F8运行到0043F95B处mov dl, 1将主界面显示状态设置为1(即显示), 下一行call方法即是显示主界面, 那这行, 我们就不继续执行了, 就在这行改为跳转到注册界面去, 0043F95B处改为jmp 0044591C(注册按钮方法入口), 再将下一行0043F960改为retn, 免得程序会继续执行其它代码导致异常~, 保存运行测试正常跳过主界面显示了注册界面, 但关闭会异常~不是那么完美, 所以我们还需要继续努力, 找出关闭和cancel按钮事件, 用DelphiDecompiler分析源码没找到对应事件(IDR也没找到), 那我们就用OD自身插件来找吧, 菜单栏->插件->API断点设置工具->常用断点设置->限制程序功能函数->EnableWindow(勾上),
    1). 注册界面关闭(与cancel), 点关闭或cancel, 程序成功停下, OD界面右侧的K面板中可以看到

    K 调用堆栈:     主线程
    地址       堆栈       函数过程 / 参数                       调用来自                      结构
    0019F038   00437026   <jmp.&user32.EnableWindow>            fireworx.00437021             0019F088
    0019F03C   00992114     hWnd = 00992114 ('fireworx',class=
    0019F040   FFFFFFFF     Enable = TRUE
    0019F04C   0043CC84   fireworx.00437004                     fireworx.0043CC7F
    

    fireworx.00437004 这个便是入口地址了

    2). 主界面关闭, 同上操作, 看到

    K 调用堆栈:     主线程
    地址       堆栈       函数过程 / 参数                       调用来自                      结构
    0019FE5C   7718D6FD   ntdll.ZwTerminateProcess              ntdll.7718D6F8                0019FF30
    0019FF34   75904663   ntdll.RtlExitUserProcess              kernel32.7590465D             0019FF30
    0019FF48   00403761   ? <jmp.&kernel32.ExitProcess>         fireworx.0040375C             0019FF44
    0019FF4C   00000000     ExitCode = 0x0
    

    <jmp.&kernel32.ExitProcess>看到这个关键词了吧, fireworx.0040375C 是这边调用的,
    接着我们就用这两个找出来的地址做做事情, 关闭注册界面原来的功能是隐藏窗体, 现在我们直接改成关闭应用, 于是将00437004处改为mov eax, 0x0 将00437009改为jmp 0040375C, 保存, 完全去掉了主界面~
     

  2. 去灰, OD载入去NAG后的程序, 按钮OK默认是灰的, 由Interactive Delphi Reconstructor(IDR)分析源码可知, 在密码框的change事件中可知方法004455B8是设置Enabled属性的, 我们在IDR中双击这行可进入到方法(入口00423734), 判断dl与内存中的值是否相等, 不相等就设置相反, OD单步跟踪到00423734处时可知首次运行, 内存值为1, dl为0, 也就是说, 程序一进来, ok就会从默认的可用状态变更到不可用状态(变灰了), 那我们就强制不让它变更就行了, eax+0x48前后几个都有值为0的, 所以我就选了一个前面的改为eax+0x46, 即00423734处将 cmp dl, byte ptr ds[:[eax+0x48] 改为 cmp dl, byte ptr ds[:[eax+0x46], 保存, 运行成功去灰~
     

  3. 暴力破解, OD载入去灰后的程序, 搜索失败关键字定位到004458E3, 方法入口是004458D8, 此处下断点, 随便输入点ok断点处停下, 看数据区右侧有个返回到00445518, 点中后回车来到调用此失败方法的下一行, 往上找到方法入口00445474, 重新单步调试, 找到第一个跳00445494, 改为jmp 004454E6到成功分支, 保存成功~
     

  4. 正常破解, 将输入串转大写与004454C5处的固定串"RIDERSINTHENIGHT"对比是否一致, 所以答案很明确了就是这个固定串, 不区分大小写, 程序会强制转大写
    Riders in the Night 是一首歌名,作者应该是名爱音乐的程序员吧_
     
     

这是160个软件part1
这是160个软件part2

1~160每个破解过程,在吾爱破解论坛都有高手破解过了,也有整理好现成的, 我这边主要就是自己动手操作的过程,与他们的不太一样
附上高手们的连接: 点击前往查看
使用的工具连接(工具有点多有点大,可以先下OD,其它的后面慢慢下) 点击前往下载

新人入门教程"玩玩破解,写给新人看" 点击前往查看
我就是从这里开始的,对我这样的小白感觉超级友好~

下面是我的OD的界面布局,我觉得这4个是最常用的界面,其它的我基本上没用到~
OD界面布局

posted @ 2024-05-23 10:07  hankerstudio  阅读(24)  评论(0)    收藏  举报