能力值:
( LV3,RANK:20 )
|
-
-
2 楼
表示不懂,给予支持。
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
是不是软件对数据库文件特征做了效验,建议从软件上着手,找找原因
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
脱壳……然后修改校验结果处,将je改成jmp……强制跳转,俗称爆破……
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
最近搞过一个软件也有自校验,这个程序启动后会打开磁盘中的文件校验是否被修改,如果被修改就功能受限,由于没有找到校验的地方,而软件也不能打补丁所以我的办法是劫持了lpk,在劫持的dll里面给程序打补丁.虽然麻烦了点但是可以解决问题.
|
能力值:
( LV3,RANK:20 )
|
-
-
6 楼
感谢各位的帮助,但我想从数据本身着手,不想改源程序
|
能力值:
( LV2,RANK:10 )
|
-
-
7 楼
通常都是通过在CreateFile等函数上下断,跑几步ReadFile读入内存之后在相应区域下内存访问断点或者硬件访问断点?
看看程序作了什么就知道。
|
能力值:
( LV2,RANK:10 )
|
-
-
8 楼
破解目标:图章制作系统 3.8
下载地址:http://www.star-reg.com/soft/sof ... GcNIlU2XngHZA%3D%3D
破解工具:OD、w32dasm、peid
破解过程:先查壳,是ASPack 2.12,是个弱壳,用工具直接脱就行了,脱完后运行脱壳文件,启动后自动关闭,并自动删除脱壳后的文件。
看来这是个有自校验的程序,我用OD载入脱壳后的文件然后下断bp GetFileSize 可是没能拦截程序。所以我也没有找到自校验的地方。(望高手指点)
那我们就带壳调试吧。用OD载入原文件,然后运行,对出现的错误都用shift+F9运行。
等程序运行后,点注册在出来的注册窗口中填写入试练码:
注册id:HsjMakeSign25459182321d9112e13390f03d475708
用户id:11111111111111111111111111111111111111111111
然后下断bp MessageBoxA 点注册后断在了
77D504EA > 8BFF mov edi,edi ; MakeSign.00485D30
77D504EC 55 push ebp
77D504ED 8BEC mov ebp,esp
77D504EF 833D BC04D777 0>cmp dword ptr ds:[77D704BC],0
77D504F6 74 24 je short user32.77D5051C
77D504F8 64:A1 18000000 mov eax,dword ptr fs:[18]
77D504FE 6A 00 push 0
77D50500 FF70 24 push dword ptr ds:[eax+24]
我们看看右下角的窗口
0012F844 0057D706 /CALL 到 MessageBoxA 来自 MakeSign.0057D701
0012F848 000209FC |hOwner = 000209FC ('系统注册--ver:2.1 软件标示...',class='Tf_reg',parent=000D0662)
0012F84C 0057D7C4 |Text = "注册失败!
注册码错误"
0012F850 0057D7BC |Title = "警告"
0012F854 00000000 \Style = MB_OK|MB_APPLMODAL
看见了吧,这个MessageBoxA 来自 程序的0057D701
如果水平高的话我们可以在OD里用Alt+E在出来的窗口中,双击MakeSign这个模块,因为这就是程序本身的领空。然后在程序领空中点ctrl+G输入0057D701,我们就来到了以下地址
0057D6D2 8B38 mov edi,dword ptr ds:[eax]
0057D6D4 FF57 04 call dword ptr ds:[edi+4]
0057D6D7 8BC6 mov eax,esi
0057D6D9 E8 AE61E8FF call MakeSign.0040388C
0057D6DE 8B83 10030000 mov eax,dword ptr ds:[ebx+310]
0057D6E4 E8 57110000 call MakeSign.0057E840
0057D6E9 84C0 test al,al
0057D6EB 75 56 jnz short MakeSign.0057D743
0057D6ED 6A 00 push 0
0057D6EF 68 BCD75700 push MakeSign.0057D7BC
0057D6F4 68 C4D75700 push MakeSign.0057D7C4
0057D6F9 8BC3 mov eax,ebx
0057D6FB E8 147DEDFF call MakeSign.00455414
0057D700 50 push eax
0057D701 E8 DEA1E8FF call MakeSign.004078E4 ; jmp to user32.MessageBoxA
看到了吧,0057D701 就是跳出错误的窗口了。
如果OD用的不是很好的话,再教大家一个办法用w32dasm载入脱壳后的程序,用shift+F12 找0057D701同样可以来到以上地址
好了我们在删除所以断点后,在0057D6E4处下断,让程序运行,出现错误的对话框不理它,再点注册程序被拦截在了0057D6E4
我们用F7进入这个call单步运行(F8)当运行到
0057E902 E8 9562E8FF call MakeSign.00404B9C
在右上角的窗口中看到了什么
EAX 01091A50 ASCII "a07d31e93f26df5673ac7491d3db60c5"
eax中的值就是真正的注册码了!
我们关掉OD运行原程序,在注册ID中输入a07d31e93f26df5673ac7491d3db60c5
看是不是成功了!
这个程序的注册信息放到了windows\HsjSoft.ini这个文件中,删除它又变成未注册版本了!
我发现内存注册机没有用,一用,软件就自动退出并删除原程序了。
我觉得这个软件有二个自校验:
1、校验软件是否被脱壳,
2、校验软件是否被用了内存注册机。
如以上条件为真,那程序自动退出,并自动删除程序本身。
|
能力值:
( LV2,RANK:10 )
|
-
-
9 楼
楼上的都是大神啊
|
能力值:
( LV3,RANK:20 )
|
-
-
10 楼
您的回答还比较靠谱点,还能提供些相应的api吗?
|
能力值:
( LV13,RANK:400 )
|
-
-
11 楼
我觉得楼主是在搞QQ,对么?
|
能力值:
( LV3,RANK:20 )
|
-
-
12 楼
鄙人菜鸟一个,怎敢觊觎QQ啊,我在研究一个简单的仪器控制软件与它获取的数据结构。
我上传一个数据吧,有兴趣的帮我看下。
这是一个复合文件(不是zip,后缀不用管),FileValidation里存了整个文件的验证码。Chrom Header里单独做了自校验,校验值保存在这个stream的某处。
|
能力值:
( LV2,RANK:10 )
|
-
-
13 楼
这已经是非常清楚了呀,CreateFileA(中文软件应该是CreateFileW ?),
然后OD的堆栈区会显示Create的文件路径,如果路径就是你要分析的文件,
就Alt+F9返回用户代码区域(有时候必须手动Ctrl+F9返回
返回之后eax(可能是其他寄存器)就是文件句柄,
然后看这个句柄被存到哪里(也可能没存直接被ReadFile了
找到ReadFile的部分,最后一个被push的参数就是读取文件之后的内存地址指针,
在内存视图里跳转到这个地址,读取完毕之后这片内存会发生改变,
你可以在这里下内存访问断点(也有可能不是检查整个文件,你需要看这个指针被偏移了多少
然后基本就可以看到校验方法了。
|
|
|