好友
阅读权限10
听众
最后登录1970-1-1
|
本帖最后由 jixiangas 于 2019-8-29 12:10 编辑
一直没坚持下来,现在终于有时间了,记录一下破解路程2019年8月23日
之前学过的都忘记了,感觉还是没有思路,边看帖子边写吧。帖子应该可以随时更新的吧。
环境和准备:xp系统,网盘存的吾爱破解的OD,网上下载的peid。运行sendto命令加入快捷方式。
(看到图了,原来需要点击加进去……)
你还需要下面的这个东西,站内搜,打开点名字就可以下载压缩包。
crackme
第一次打开是这个
1
标题直译是你好,你需要杀了我。。。
内容是欢迎。。。
确定就没了。我先去看攻略。。。
主界面
界面1
exit应该是退出,这个竟然是认输,还以为是退出
点第一个按钮后
界面1-1
输入你的名字,序列号,第一个是检查,第二个认输
界面1-1错误
随便输入就弹出个错误界面来,估计需要这个内容来下手。
正式开始,快捷方式进od
快捷方式
点一下全屏
od第一个界面
好难看懂
od全屏
先运行,看看
运行1
还以为没反应,最小化后在桌面上
运行1-1
再重新开始
重新开始1
攻略没看懂,明天继续。。。
--------------------------------------------------------------------------------------------
手机继续更新:
少个查壳的过程,壳是什么东西我也不知道。。。反正没壳就行。
程序右键发送到peid,发现是delphi编写的,没壳。
明天下载第二个程序,如果这个也是delphi编写的,那就都运行od对比一下,跟我去找茬。
--------------------------------------------------------------------------------------------
2019年8月24日周六
peid delphi3.0程序写的①,找到后面标delphi的下载,peid delphi4.0-.5.0 一个工具 版本不一样,应该没多大关系
peid4
od对比图
中间是汇编语言,先对比10行数据。
1 push ebp
2 move ebp,esp
3 add esp,-0xC
4 mov 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:[eax]
8 call跟5重复
①call Acid_bur.00429F74
②call CKme.00440E34
9 跟6重复
mov ecx,dword ptr ds:[0x43097C]
mov eax,dword ptr ds:[0x45A54C]
10跟6重复
mov eax,dword ptr ds:[0x430A48]
mov eax,dword ptr ds:[eax]
开始看攻略,百度……
F8可以按顺序执行每一条汇编语句,F7可以在有函数也就是标call的地方进入,ctrl+F2可以从新开始,F9可以直接执行程序,F12是暂停程序,F2是下断点,执行程序后就停在这条上面不执行,可以接F8或F7。
最后一个窗口可以双击加汉语注释。
1单步F8
到这里弹出主界面,注释一下。
主界面1
思路是把这个弹窗的call直接删除,百度了一下需要在这条上按空格,然后输入nop,然后点汇编,点取消
nopcall1
然后代码会变成红色nop,这个时候如果ctrl+F2重新开启程序,刚才的变更又没有了,再去问度娘。
需要把改动的地方重新保存成新的程序才可以。
步骤1,nop完变红色后,右键点复制到可执行文件,所有修改
改存1-0
2全部复制
改存1-1
3弹出新的窗口继续右键选保存文件
改存1-2
4随便取个名字保存
改1
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:[esi+0x24] ; 3,直接弹出内存错误来,下一个
nop3报错
0042563D FF93 CC010000 call dword ptr ds:[ebx+0x1CC] ; 4,可以了
nop4成功
步骤2
F7进入这个4号函数,可以看到弹窗内容的注释,跟第一次的弹窗内容是一样的。
nop4入
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 [CracKerWoRlD]
0042F790 A1 480A4300 mov eax,dword ptr ds:[0x430A48]
0042F795 8B00 mov eax,dword ptr ds:[eax] ; Acid_bur.0042F610
0042F797 E8 D4A9FFFF call Acid_bur.0042A170 ; 5--只nop这条还是会报内存错误
0042F79C C3 retn ;结束
步骤3
可以把这些都删掉,留最后一行。也可以在第一行用jmp 0042F79C,0042F79C叫地址类似于门牌号吧,就在每一行的第一列。
跳到最后一行,刚进来就结束的意思,等于没有执行中间的部分。
nop需要一直点直到这条语句完全删除,一行有时候需要nop3次才能删除掉,保存有这条提示点是就好了,不知道什么意思。
报错提示
如果把结束行也删掉,程序是会报下面的错误。
nop返回5
方式二:有字符串,可以使用查找字符串的方式,右键中文搜索引擎-搜索ascii
ctrl+f查找字符串hello you have to kill me! 双击就可以转到汇编了,然后进行方式一步骤2继续。
方式三:对话框下断点
下断
选择mba
mba
点击b可以看到断点已经下好了
b
运行程序,
mba1
F8运行到这里就会弹出对话框来了
mba2
点击确定后,按F8一直往下运行,直到结束这个函数,可以看到上一行我们分析的4call,F2下断点
mba3
重新运行,来到4call,进入后看到5call
mba4
进入5call,下面可以看到mba,进入
mba5
F8
mba6
这样就来到我们下断点的位置了
mba7
然后逆向思考一下,如果重新载入断点被禁用了,可以点b,选择断点然后右键激活
1 把4call删除测试可以
2 把 call <jmp.&user32.MessageBoxA> ; mba删除也可以
3 把 jmp dword ptr ds:[<&user32.MessageBoxA>] ; user32.MessageBoxA 删除后无法打开了
4 call 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:[ebx+0x1CC] ; 3目前正常
00429FC2 FF56 24 call dword ptr ds:[esi+0x24] ; 2删除内存错误
0042FD97 E8 F0A1FFFF call Acid_bur.00429F8C ; 1删除少主窗口
删除3后,可以弹出错误信息了。
继续看攻略。。。
--------------------------------这个是个短暂的结束,不知道为什么下面会有那么多图,编辑了也看不到--------------------------------------------
|
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|