【文章标题】: 算法分析实战篇和应用篇之提高(一)我的常用断点系统
【文章作者】: NBA2005
【作者邮箱】: [email]stockfox1699@126.com[/email]
【作者QQ号】: 382309369
【软件名称】: 小蜜蜂和check 求解没有任何提示的crackme算法
【下载地址】:
http://bbs.pediy.com/showthread.php?t=56420
小蜜蜂
http://bbs.pediy.com/showthread.php?t=61079
求解没有任何提示的crackme算法
【使用工具】: OD
【作者声明】: 试图对算法分析实战中的破解难点进行尽可能全面的阐述,
浅薄之处请诸位大侠海涵并赐教!
--------------------------------------------------------------------------------
【详细过程】
算法分析实战篇和应用篇之提高(一)我的常用断点系统
首先,我要说明的是:这不是一篇破文,也不是教学。我只是试图对算法分析的破解
理论进行尽可能全面的阐述。所谓提高只是相对于我的入门篇而言,高手请黑眼睛飘一边。
汇编基础差的朋友,推荐看大菜一号的破文,对汇编的解释很详细,实在是业余破解者学
汇编的好文啊。
今日感冒涕流,只好看《神探狄仁杰III》消遣。第一集就让我看到了破绽:朝廷已经准
确预测到了地震的方位和时间。既然老百性都接到了通知开始疏散,身为押运军垧的房
将军肯定也接到了通知。如此恶劣的天气,仅需一天就能通过的大漠,又没有兵变和重
大战事发生,房将军为何冒兵家大忌急于押送呢?更不用提遇险时正规部队的队形毫无
章法、没有先锋和远哨。只好以一句剧情需要艺术处理来理解了。
学破解就是要善于发现问题,这样才能学得快、学得精。学习破解最好的方法就是批判
的接受,而不是照单全收。要批判地接受就必须自己先尝试破解,这样才能发现自己的
不足和弱点,才能扎实地成长。我很欣赏riijj Crackme (1) 的详解里对楼主的注释说不的人:
{
thebutterfly
中级会员
资 料:
注册日期: Jul 2004
帖子: 422
精华: 5
声望: 10 63 2005-04-25, 20:25
--------------------------------------------------------------------------------
楼主提供的破文有一处地方有问题:
假如a是一个32位的有符号整数,以下的四句(A,B句在破文中出现)
mov eax,a
cdq //A
xor eax,edx //B
mov a,eax
不是求a的绝对值
如果是正数,最后结果还是这个数
如果是负数,结果是这个数取反的结果,例如原来a是-5,执行后a是4
不过这不影响破解的结果,感谢楼主提供CrackMe和破文!
}
我在入门篇中对易语言的断点详细阐述。对此,朋友颇有微词。易语言是要扶持,
我坚持批判地扶持的观点。对红旗UNIX同样如此。
关注1:对红旗UNIX系统的破解讨论在看雪论坛上很难见到。遗憾啊。
我在入门篇里罗列了一大堆常用的断点方法。但在实际破解中,我最常用的断点方
法有四种:
1.有提示的用字符串查找。
2.有提示且字符串查找无效的用F12暂停法。这方法常常用于加密字符串的位置判断上。
3.无提示的用消息断点法。
4.无提示且用消息断点无效的用XP万能断点法。
第一种方法最普通了。大家都会。
第二种方法在看雪上很早就流行了。分为快捷版和老实版两个具体形式。对于老实版,
我就推荐看雪上的文章:出现错误对话框的杀手锏--暂停--初学者适用 BY liyangsj。
快捷版其实在入门篇中已经提过了。我在“第二题是找到硬件序列号。这是一个明码比较
的题目。”中已经进行了叙述:F12暂停,然后CTRL+F9或ALT+F9,直到错误提示的确定
之类的按钮有效,点它,继续回到OD CTAL+F9数次,回到主程序里出现提示的CALL下。
这方法常常用于加密字符串的位置判断上,在汉化中应用很广泛。
我就以Petnt大侠的以彼之道还施彼身的小蜜蜂为例子。
步骤一:运行小蜜蜂-->填入用户名和假注册码-->确定-->出现错误提示框(或者正确提示框)。
步骤二:运行OD-->附加小蜜蜂。
步骤三:F12暂停-->CTRL+F9或ALT+F9,直到错误提示的确定之类的按钮有效,点它。
步骤四:继续回到OD CTAL+F9数次,回到主程序里出现提示的CALL下。
步骤五:向上追源到CALL所在函数段的段首(或重要跳转处),设断点。
老实版的我就引用liyangsj的文章,写得很好:
{
标 题: 出现错误对话框的杀手锏--暂停--初学者适用
发帖人:liyangsj
时 间: 2005-08-13 15:54
原文链接:
http://bbs.pediy.com/showthread.php?threadid=16147
引用精彩的一段:
我们再来说一下CALL的调用,调用一个子程序的时候:1、向堆栈中压入下一行程序的
地址;2.JMP到call的子程序地址处关键是1、在堆栈中压入了下一行程序的地址,其目的
是为了调用子程序结束后返回用的,如果走到一个CALL的时候我们F7一次跟进后会停在
所调用的子程序的开头第一个代码处,这时看堆栈的第一行压入了调用时的下一行地址。
这个也是我们要利用的:我们只要在程序某段的开头第一行代码下断(下面也行,这样
可以避免不必要的干扰)中断后在堆栈中的第一行“选反汇编中跟踪”就可以返回到上一层
的调用这里的地方了,回到上一层后,如果发现关键段不是这段,再在此段的开头第一行
下断,向上找。这样可以一层一层向上找,直到找到最初的调用的CALL,这里就是关键段了!
当然暂停后用AIT+K也可以看的到(但觉得有时不能准确定位)。
注释:AIT+K是调用堆栈。
}
有更高要求的朋友可以看看《OD里SHIFT+F4条件断点用法篇》BY pjb:
{
标 题: 【分享】致菜鸟: OD里SHIFT+F4条件断点用法篇
发帖人:pjb
时 间: 2005-08-24 20:25
原文链接:
http://bbs.pediy.com/showthread.php?threadid=16494
详细信息:
}
WIN98时代的万能断点法bpx hmemcpy让人怀念。再难断的程序,只要能在WIN98下运行,就可以用万能断点法bpx hmemcpy来设断。我以前每当遇到难断的程序,就产生猜想:能不能在程序读取注册码或用户名的时候断下呢?那就是POINT H,XP下所谓的万能断点。虽然许多文章说它支持WIN2K系统,但我的实践证明对WIN2K的支持率很低。首先,介绍newsearch翻译的好文:
{
标 题: POINT H收集翻译
发帖人:newsearch
时 间: 2005-02-05 01:44
原文链接:
http://bbs.pediy.com/showthread.php?threadid=10833
详细信息:
引用:
1. 什么是POINT H?
它是在XP/2K机子上的老的已知的hmemcpy,搜索user32中:F3 A5 8B C8 83 E1 03 F3 A4 E8,
就是POINT H。 或者搜索8B C1 C1 E9 02 F3 A5 8B C8 83 E1 03 F3 A4 E8。一旦找到,它返回位置地址,也就是说在内存拷贝之前。(实际的操作:F9,在内存中搜索上述字符串)
该模式应该发生在USER32的第一个OX3FFFF。比如:
77D46706 mov eax, ecx
77D46708 shr ecx, 2
77D4670B repe movsd ; <-- 在该指令上中断
77D4670D mov ecx, eax
77D4670F and ecx, 3
77D46712 repe movsb
77D46714 call sub_77D46722
该段代码显示了内存是在哪里从gui-项被拷贝到提供给用户的缓冲器中。追踪一小段,出现SendMessage和Getwindow×××代码段。
2、在OD或SICE中输入:
BP “POINT-H的值”或在SICE中用BPX。它类似Win98中的hmemcpy,但工作在XP的80%的程序中(不用于VC++)。但我们可以用一些技巧使它用于所有的程序(也可用于VC++)。当 在程
序编辑框中输入假的序列号时,程序中断。
3、实际上,输入bpx user32!EcGetText+51可以做到"d edi-ebx"。
4、还有寻找POINT H的另外一个方法:如果有USER32.DLL的符号文件(USER32.PDB或USER32.DBG),
可以在IDA中打开USER32.DLL,适用PDB插件加载上面的符号,然后可以搜索函数ECGetText。它就是POINT H。该函数是USER32.DLL的内部函数,调用来自EditWndProc(也是一个内部函数)。它实际上是对键盘输入和鼠标按键的一个中断,但是和万能断点插件中POINT H的地方不一致。万能断点插件中的POINT H好像常常不能中断,只有VB5和VB6的能中断。请教大虾们指导一下。
搜索方法:
菜单:查看->执行模块->点USER32.DLL,在USER32模块窗口中:右键->搜索->二进制字符,在HEX里输入F3 A5 8B C8 83 E1 03 F3 A4 E8,就可以找到Point-H的位置了。我这XP+SP2 完全可以啊。
}
我就以CRACK ME 论坛上"check 求解没有任何提示的crackme算法"来举例子:
1.用OD运行"check 求解没有任何提示的crackme算法"里的Project1.exe,输入用户名和注册码.
2.右键选查看->执行模块->点模块'USER32.DLL',来到USER32模块窗口中:右键->搜索->
二进制字符(CTRL+B),
3.将"F3 A5 8B C8 83 E1 03 F3 A4 E8"复制到二进制字符里的HEX项.
4.开始搜索,我的机子是7738352D.记住:这个地址与你的XP系统是一一对应的,是一个恒定值.以
后你记住就行了.
5.在77D33528设断,然后再回到注册界面,点check,F9直到断下时寄存器里出现注册码:
EAX 001487C0 ASCII "1234567879012"
ECX 0000000D
EDX 00140608
EBX 0000000D
ESP 0012F2D4
EBP 0012F2E4
ESI 001487C0 ASCII "1234567879012"
EDI 00DC66A0
EIP 77D33528 user32.77D33528
6.在EAX 001487C0或ESI 001487C0上右击,选数据窗口中跟随.
7.在下面内存中对注册码设访问内存断点,运行程序:
001487C0 31 32 33 34 35 36 37 38 37 39 30 31 32 00 00 00 1234567879012...
8.断下后,取消内存访问断点,然后F8单步,以后CTRL+F9返回,直到主程序领空或关键程序段..
CTRL+F9八次,停在0043D170:
0043D170 |. 8943 0>mov dword ptr [ebx+C], eax
0043D173 |> 8B03 mov eax, dword ptr [ebx]
0043D175 |. 83F8 0>cmp eax, 0C 注册码位数必须是0C,证实了算法关键所在
0043D178 |. 75 1B jnz short 0043D195
此时,堆栈窗口显示:
0012F5DC |00DC66B4 ASCII "1234567879012"
0012F5E0 |00000000
0012F5E4 ]0012F624
0012F5E8 |00438C93 返回到 Project1.00438C93 来自 Project1.00439EE8
0012F5EC |00DC66B4 ASCII "1234567879012"
0012F5F0 |00438D2F 返回到 Project1.00438D2F 来自 Project1.00438C88
0012F5F4 |0012F7A8
0012F5F8 |0042DC88 Project1.0042DC88
哈哈,直接到了算法关键的程序段。
XP万能断点法同样适用于小蜜蜂。简略步骤:
1.OD运行小蜜蜂,输入用户名和注册码。
2.右键转到:77D33528(我机器上的POINT H),设断F2。
3.回到注册界面,点确定。
4.F9直到断下时寄存器里出现注册码:
EAX 0014C5B0 ASCII "123456"
ECX 00000006
EDX 00140608
EBX 00000006
ESP 0012F4EC
EBP 0012F4FC
ESI 0014C5B0 ASCII "123456"
EDI 00AB3E20
EIP 77D33528 USER32.77D33528
5.内存设访问断点:
0014C5B0 31 32 33 34 35 36 123456
6.取消访问断点,F8或CTRL+F9返回主程序领空。
我个人的理解:
1.一定要先输入用户名和注册码,然后在XP万能断点上设断.次序千万不能错.不信你试试.
2.在访问内存中注册码时断下后,一定要取消内存断点.如果你怕一次不成功,可以空格键禁
用断点,以后需要时空格键激活.
3.CTRL+F9返回,直到主程序领空或关键程序段。
4.对某个单机而言,XP万能断点的值是恒定的。你只要找到一次,拷入记事本中,存为
XP万能断点.TXT,放在桌面上,方便随时复制。
5.如果记不住,又出门在外,可以在看雪的工具里下载找的工具。
对程序理解深的记牢下面的程序代码,用OD修改出来也行。
mov eax, ecx
shr ecx, 2
repe movsd ; <-- 在该指令上中断
mov ecx, eax
and ecx, 3
repe movsb
call sub_77D46722
6.“bpx user32!EcGetText+51”的效率太低,不实用。
7. XP万能断点不适用于WIN2K/NT。
这里再链接一个详细的例子供朋友参照理解:
{
标 题: 利用万能断点找出关键跳转
作 者: moodsky
时 间: 2006-12-17 15:35
链 接:
http://bbs.pediy.com/showthread.php?threadid=36520
详细信息:
}
............................
我说过,要批判地接受。很多人都会用,但又有多少人对其机理穷追不舍?问题来
了:XP万能断点的具体机理是什么?CRACK ME作者怎样对抗?
{
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课