jixiangas 发表于 2019-8-23 17:29

160个craceme边学边做160-1

本帖最后由 jixiangas 于 2019-8-29 12:10 编辑

一直没坚持下来,现在终于有时间了,记录一下破解路程2019年8月23日
之前学过的都忘记了,感觉还是没有思路,边看帖子边写吧。帖子应该可以随时更新的吧。
环境和准备:xp系统,网盘存的吾爱破解的OD,网上下载的peid。运行sendto命令加入快捷方式。

(看到图了,原来需要点击加进去……)
你还需要下面的这个东西,站内搜,打开点名字就可以下载压缩包。


第一次打开是这个
标题直译是你好,你需要杀了我。。。
内容是欢迎。。。
确定就没了。我先去看攻略。。。
主界面


https://www.52pojie.cn/forum.php?mod=image&aid=1642229&size=300x300&key=7fe0ed28871b6d75&nocache=yes&type=fixnone&ramdom=MVcPO
exit应该是退出,这个竟然是认输,还以为是退出
https://www.52pojie.cn/forum.php?mod=image&aid=1642230&size=300x300&key=bdc69212ccd55ba6&nocache=yes&type=fixnone&ramdom=Cge8k

点第一个按钮后

输入你的名字,序列号,第一个是检查,第二个认输

随便输入就弹出个错误界面来,估计需要这个内容来下手。
正式开始,快捷方式进od

点一下全屏

好难看懂

先运行,看看

还以为没反应,最小化后在桌面上

再重新开始
攻略没看懂,明天继续。。。
--------------------------------------------------------------------------------------------
手机继续更新:
少个查壳的过程,壳是什么东西我也不知道。。。反正没壳就行。
程序右键发送到peid,发现是delphi编写的,没壳。
明天下载第二个程序,如果这个也是delphi编写的,那就都运行od对比一下,跟我去找茬。
--------------------------------------------------------------------------------------------
2019年8月24日周六
peid delphi3.0程序写的①,找到后面标delphi的下载,peid delphi4.0-.5.0 一个工具 版本不一样,应该没多大关系
od对比图

中间是汇编语言,先对比10行数据。
1 push ebp
2 move ebp,esp
3 add esp,-0xC
4mov eax,后面的应该是程序名字
①mov eax,Acid_bur.0042FC88
②mov eax,CKme.00458188
5 call,后面的应该是程序名字
① call Acid_bur.004050EC                  
② call CKme.00405F30   
6 mov eax,dword ptr ds:[],中括号里面的内容不一样
①mov eax,dword ptr ds:[0x430A48]
②mov eax,dword ptr ds:[0x45A54C]
7 mov eax,dword ptr ds:    
8 call跟5重复
①call Acid_bur.00429F74                  
②call CKme.00440E34                     
9 跟6重复
mov ecx,dword ptr ds:         
mov eax,dword ptr ds:         
10跟6重复
mov eax,dword ptr ds:   
mov eax,dword ptr ds:            

开始看攻略,百度……
F8可以按顺序执行每一条汇编语句,F7可以在有函数也就是标call的地方进入,ctrl+F2可以从新开始,F9可以直接执行程序,F12是暂停程序,F2是下断点,执行程序后就停在这条上面不执行,可以接F8或F7。
最后一个窗口可以双击加汉语注释。

到这里弹出主界面,注释一下。

思路是把这个弹窗的call直接删除,百度了一下需要在这条上按空格,然后输入nop,然后点汇编,点取消

然后代码会变成红色nop,这个时候如果ctrl+F2重新开启程序,刚才的变更又没有了,再去问度娘。
需要把改动的地方重新保存成新的程序才可以。
步骤1,nop完变红色后,右键点复制到可执行文件,所有修改

2全部复制

3弹出新的窗口继续右键选保存文件

4随便取个名字保存

5关闭OD,重新用od打开这个新程序。
好吧,主界面没了,还得重新来看。。。
找到问题,原来删除的这个函数部分后不完整导致报错。
用最笨的方法,F7进入后测试每个单独的call删除掉。
--------------------------------------------------------------------------------------------------
方式一:F8一个个试
步骤1
0042FD97   .E8 F0A1FFFF   call Acid_bur.00429F8C                   ;弹出窗口,F7进第一个
0042FD97   .E8 F0A1FFFF   call Acid_bur.00429F8C                   ;2,nop还是没有,继续下一个
00429FC2   .FF56 24       call dword ptr ds:             ;3,直接弹出内存错误来,下一个

0042563D    FF93 CC010000   call dword ptr ds:            ; 4,可以了

步骤2
F7进入这个4号函数,可以看到弹窗内容的注释,跟第一次的弹窗内容是一样的。

0042F784    6A 00         push 0x0                                                   ;开始
0042F786    B9 A0F74200   mov ecx,Acid_bur.0042F7A0                ; hello you have to kill me!
0042F78B    BA BCF74200   mov edx,Acid_bur.0042F7BC                ; Welcome to this Newbies Crackme made by ACiD BuRN
0042F790    A1 480A4300   mov eax,dword ptr ds:
0042F795    8B00            mov eax,dword ptr ds:               ; Acid_bur.0042F610
0042F797    E8 D4A9FFFF   call Acid_bur.0042A170                   ; 5--只nop这条还是会报内存错误
0042F79C    C3            retn                                                         ;结束
步骤3
可以把这些都删掉,留最后一行。也可以在第一行用jmp 0042F79C,0042F79C叫地址类似于门牌号吧,就在每一行的第一列。
跳到最后一行,刚进来就结束的意思,等于没有执行中间的部分。


nop需要一直点直到这条语句完全删除,一行有时候需要nop3次才能删除掉,保存有这条提示点是就好了,不知道什么意思。

如果把结束行也删掉,程序是会报下面的错误。



方式二:有字符串,可以使用查找字符串的方式,右键中文搜索引擎-搜索ascii

ctrl+f查找字符串hello you have to kill me!双击就可以转到汇编了,然后进行方式一步骤2继续。

方式三:对话框下断点

选择mba

点击b可以看到断点已经下好了

运行程序,

F8运行到这里就会弹出对话框来了

点击确定后,按F8一直往下运行,直到结束这个函数,可以看到上一行我们分析的4call,F2下断点

重新运行,来到4call,进入后看到5call

进入5call,下面可以看到mba,进入

F8

这样就来到我们下断点的位置了

然后逆向思考一下,如果重新载入断点被禁用了,可以点b,选择断点然后右键激活
1把4call删除测试可以
2把 call <jmp.&user32.MessageBoxA>         ;mba删除也可以
3把 jmp dword ptr ds:[<&user32.MessageBoxA>] ;user32.MessageBoxA 删除后无法打开了
4call user32.MessageBoxExA                ; 弹出对话框,这个应该是mba这个函数,删除不掉,他的里面做任何改动都没法保存

弹窗到此分析完毕。断点是一个个测试的,虽然费时间,但是就10几个断点,感觉熟悉了比跑F8快。
然后是主窗口,把删除对话框的保存成新程序,用OD载入,之前的注释都没有了(这点不方便)
运行程序,F12暂停,来到一个函数的结尾,F8继续
7C92E514 >C3            retn
F8
77D19418    C3            retn
这个的上一条显示WaitMessage,直译是等待信息
0042A58D   .E8 6EB3FDFF   call <jmp.&user32.WaitMessage>         ; [WaitMessage
0042A592   > \33C0          xor eax,eax
F8
0042A5AC   .C3            retn
F8
0042A5BA   .C3            retn
F8一直在这里循环了


往上看有个入口地址,再往上是用F8分析过的主窗口函数的开始。

还是看循环最后一跳语句,第一列是个门牌号,返回到程序开头
0042A0A5   .^\74 EF         je short Acid_bur.0042A096

这个call的门牌号是0042A018跟上面的地址对接近,这样也能找到程序开始,这样下断点就比较快一些了。
0042FDD3   .E8 40A2FFFF   call Acid_bur.0042A018                   ;主窗体

问题不是删除这个主窗口,所有找这个也没什么用
重新载入程序,点第一个按钮进入程序界面,问题来了,输入东西点按钮,什么提示都不弹出来了。
估计之前的修改是有问题的
问题应该是后面的注册会用到前面的参数,有一般测试是不能用的,下次找时间都测试出来。
--汇总
测试带user32的call程序不能删除,
程序5以后的都是user32,此行删除对话框看不到了,但是后面的注册错误的弹窗也 不会出现了
0042A1A9|.E8 FAB5FDFF   call <jmp.&user32.MessageBoxA>         ; \5删除后面的注册也不弹窗了
0042F797    E8 D4A9FFFF   call Acid_bur.0042A170                   ; 4删除内存错误
0042563D    FF93 CC010000   call dword ptr ds:            ; 3目前正常
00429FC2    FF56 24         call dword ptr ds:             ; 2删除内存错误
0042FD97    E8 F0A1FFFF   call Acid_bur.00429F8C                   ; 1删除少主窗口
删除3后,可以弹出错误信息了。
继续看攻略。。。
--------------------------------这个是个短暂的结束,不知道为什么下面会有那么多图,编辑了也看不到--------------------------------------------

yanmingming 发表于 2019-8-23 17:51

楼主加油!

Mr.Lih 发表于 2019-8-23 18:34

感谢楼主,先看看。。

莫莫 发表于 2019-8-24 18:08

非常感谢
页: [1]
查看完整版本: 160个craceme边学边做160-1