一些破解用到的小技巧
1.当注册窗口挡住OD时,可以AIT+F5,是OD总在最前。2.去delphi对话框的另一种方法
ResScope打开delphi的RC数据删除以下东西,可以去除对话框
onclose = formclose
oncreate =formcreate
ondestory =formdestory
3.标志位破解
call XXX
test eax,eax
je XXX
此时eax为标志位,在那个call里直接给eax赋值即可。。
mov eax,1
retn
4.当程序被封装到一个dll里时,由一个外壳程序来调用时(发现进程里有一个exe和一个dll。)
可以下
bp ResumeThread
或者
bp SuspendTread
5.对于灰色按钮,或者不可见按钮.
用SPY工具试试,对于灰色按钮,或者不可见按钮效果很好。
6.万能断点
API插件里有
7.网络验证
用F12法NOP掉登入框,然后查找网络验证Call,NOP掉,后面的跳转也nop掉,然后引导程序走向验证成功处。F12调用,在断尾或者段首下断。
8.注册表断不下来时
断启动框,明明知道注册信息保存在注册表里,下注册表断点却不到键值,此时可以到试用框弹出的前一次注册表断点那停下,F8一步一步的找到启动框的弹出位置,再去分析。
9.自校验
校验一般类型:多为比较文件大小,可将程序用十六进制编辑工具未脱壳得原程序加大体积会不会不能运行,或者将脱壳了的程序重新加个壳看能不能运行。还有比较程序名字的也常见(不过这个没有强度可以忽略)。
去校验一般方法:下好相应的断点,然后开两个od比较调试。
vb程序
1、下rtcFileLen、rtcFileLength断点
2、P-code编译的vb程序用WKTVBDE调试
Delphi程序
下SetFilePointer、GetFileSize断点
还有常用的
下CreateFileA断点,开两个od比较
下退出进程ExitProcess断点 ,回溯找到关键
10.最佳修改的地方
能改内存地址赋值的,要先改赋值。
mov ss:,0---------------此处是最佳修改的地方
......
.......
mov byte al.ss:------此处凑合
pop...
retn
test al,al
je xxxxxx-----------------此处最差
11.BC++找不到字符串时
ALt+M,在idata段下断点,F9,断下来之后就可以查找字符串了。
12.vb程序找不到关键字符串
可以用GetVBres修改成数字,再查找
13.VB追注册码时
可用_vbaStrCmp和_vbaStrComp.注意堆栈,就能找到注册码。
按OD上的E,找到Msvbvm6.0,双击进入,右击--搜索--当前模块中的名称
14.VB输入框软件(输入注册码)类型的破解
bp rtcInputBox //输入框
15.易语言破解-正常灰色不可视三种命令
原:05
不可视:06/04
灰:07
前提:知道按钮的名称为:直接查找"按钮"
16.网络验证
可以截取数据然后封包。用封包助手-->截取的Recv,然后修改HOST文件,指向本地。
用E语言写个简单的服务端,把16进制的封包返回即可。用的一个-->外挂海万能模块1.70贺岁版.ec
17.F12堆栈调用
004C0A1C 55 push ebp //登陆按钮代码启始
004C0A1D 8BEC mov ebp,esp
004C0A1F B9 07000000 mov ecx,7
OD载入
直接运行点登陆
F12暂停
Alt+K
调用堆栈
调用堆栈
地址 堆栈 函数例程 / 参数 调用来自 框架
0012FB4C 77D13C53 包含 7FFE0304 USER32.77D13C51 0012FB7C
0012FB50 0047AFB1 <jmp.&USER32.WaitMessage> 复件_PAu.0047AFAC 0012FB7C
0012FB80 0047A5F8 ? 复件_PAu.0047AEBC 复件_PAu.0047A5F3 0012FB7C
0012FBA4 004773EA 复件_PAu.0047A5DC 复件_PAu.004773E5 0012FC00
双击004773E5来到代码处下断开始跟!
004773F6 /74 0F je short 复件_PAu.00477407 //似乎是关键跳(1),不要他跳
004773F8 |8B45 FC mov eax,dword ptr ss:
004773FB |C780 4C020000 02000>mov dword ptr ds:,2
00477405 |EB 14 jmp short 复件_PAu.0047741B
00477407 \8B45 FC mov eax,dword ptr ss:
0047740A 83B8 4C020000 00 cmp dword ptr ds:,0
00477411 74 08 je short 复件_PAu.0047741B
00477413 8B45 FC mov eax,dword ptr ss:
00477416 E8 1DFDFFFF call 复件_PAu.00477138
0047741B 8B45 FC mov eax,dword ptr ss:
0047741E 8B80 4C020000 mov eax,dword ptr ds:
00477424 85C0 test eax,eax
00477426 ^ 74 B8 je short 复件_PAu.004773E0 //原先是跳的,当改了关键跳(1)之后就不跳了,直接来到退出代码
004CF4DB 803D A4CE4D00 00 cmp byte ptr ds:,0
004CF4E2 75 0F jnz short 复件_PAu.004CF4F3 //关键关键跳!让他跳过!
004CF4E4 A1 98474D00 mov eax,dword ptr ds:
004CF4E9 8B00 mov eax,dword ptr ds:
004CF4EB 8B10 mov edx,dword ptr ds:
004CF4ED FF92 EC000000 call dword ptr ds: //调用登陆验证框
004CF4F3 A1 204B4D00 mov eax,dword ptr ds:
004CF4F8 8B00 mov eax,dword ptr ds:
004CF4FA 8B10 mov edx,dword ptr ds:
004CF4FC FF92 EC000000 call dword ptr ds: //登陆验证框的退出代码
004CF502 48 dec eax
004CF503 0F85 D6010000 jnz 复件_PAu.004CF6DF
004CF509 833D FCCE4D00 00 cmp dword ptr ds:,0
如果直接修改关键跳(1)的话,进去之后,由返回来到退出代码!
所以直接破调用登陆框代码!
18.附加数据的处理
可以用PEID里得插件,overlay1.0
19.躲避ASProtect内存校验
用最后一次异常,在00401000下断即可到达OEP之后,在包含中显示data段(00401000下面的那个段)下内存写入,看到
00D308B8 A3 F8C05000 mov dword ptr , eax ; AFR.00400000
00D308BD E9 8D010000 jmp 00D30A4F
00D308C2 F3: prefix rep:
00D308C3 EB 02 jmp short 00D308C7
eax=00400000 (AFR.00400000), ASCII "MZP"
ds:=00000000
在内存检查选项:
内存地址:50C0F8
内存数值:00400000
即可
20.手动查找IAT
自己找一个call,然后enter进去。手动找iat,找到几个的话。就右键-- 在数据窗口跟随-内存地址
或者ctrl+b ff15 (C类程序) ff25(delphi) 好东西,学习一下! 总结的确实不错,。。很多都是自己用到的呵呵 学习一下!!很实用~~ 看完了支持一下!~ 学习啊,,写的好有深度 太丰富了,谢谢分享。 这个总结的很好,不过我一般用不上,呵呵 看看。内容不错。 谢谢学习学习