首页
社区
课程
招聘
[旧帖] 数据文件自校验怎么破? 0.00雪花
发表于: 2014-1-28 12:35 5153

[旧帖] 数据文件自校验怎么破? 0.00雪花

2014-1-28 12:35
5153
有一个数据处理软件,它用windows复合文件的方式存储数据,这个复合文件在其中的一个stream上做了校验保护,一旦数据被篡改就无法读取,提示校验失败,校验值一定是写在这个stream的某个位置。请问这种数据保护如何破解?有经验的兄弟帮忙支招。

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
免费 0
支持
分享
最新回复 (12)
雪    币: 80
活跃值: (109)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
表示不懂,给予支持。
2014-1-28 13:27
0
雪    币: 14
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
是不是软件对数据库文件特征做了效验,建议从软件上着手,找找原因
2014-1-28 17:33
0
雪    币: 87
活跃值: (59)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
脱壳……然后修改校验结果处,将je改成jmp……强制跳转,俗称爆破……
2014-1-28 19:21
0
雪    币: 93
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
最近搞过一个软件也有自校验,这个程序启动后会打开磁盘中的文件校验是否被修改,如果被修改就功能受限,由于没有找到校验的地方,而软件也不能打补丁所以我的办法是劫持了lpk,在劫持的dll里面给程序打补丁.虽然麻烦了点但是可以解决问题.
2014-1-28 22:52
0
雪    币: 102
活跃值: (50)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
6
感谢各位的帮助,但我想从数据本身着手,不想改源程序
2014-2-2 15:05
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
通常都是通过在CreateFile等函数上下断,跑几步ReadFile读入内存之后在相应区域下内存访问断点或者硬件访问断点?
看看程序作了什么就知道。
2014-2-3 17:36
0
雪    币: 36
活跃值: (10)
能力值: ( 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、校验软件是否被用了内存注册机。
如以上条件为真,那程序自动退出,并自动删除程序本身。
2014-2-4 18:04
0
雪    币: 37
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
楼上的都是大神啊
2014-2-4 18:38
0
雪    币: 102
活跃值: (50)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
10
您的回答还比较靠谱点,还能提供些相应的api吗?
2014-2-6 19:23
0
雪    币: 496
活跃值: (286)
能力值: ( LV13,RANK:400 )
在线值:
发帖
回帖
粉丝
11
我觉得楼主是在搞QQ,对么?
2014-2-6 19:47
0
雪    币: 102
活跃值: (50)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
12
鄙人菜鸟一个,怎敢觊觎QQ啊,我在研究一个简单的仪器控制软件与它获取的数据结构。
我上传一个数据吧,有兴趣的帮我看下。
这是一个复合文件(不是zip,后缀不用管),FileValidation里存了整个文件的验证码。Chrom Header里单独做了自校验,校验值保存在这个stream的某处。
上传的附件:
2014-2-7 12:58
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
这已经是非常清楚了呀,CreateFileA(中文软件应该是CreateFileW ?),
然后OD的堆栈区会显示Create的文件路径,如果路径就是你要分析的文件,
就Alt+F9返回用户代码区域(有时候必须手动Ctrl+F9返回
返回之后eax(可能是其他寄存器)就是文件句柄,
然后看这个句柄被存到哪里(也可能没存直接被ReadFile了
找到ReadFile的部分,最后一个被push的参数就是读取文件之后的内存地址指针,
在内存视图里跳转到这个地址,读取完毕之后这片内存会发生改变,
你可以在这里下内存访问断点(也有可能不是检查整个文件,你需要看这个指针被偏移了多少
然后基本就可以看到校验方法了。
2014-2-7 13:06
0
游客
登录 | 注册 方可回帖
返回
//