kernel2008 发表于 2008-4-26 17:36

ini文件类型验证带壳破解一例

by:kernel2008->【i386 information security team of china】<-qq:kernel2008@qq.com

【调试平台】深度优化windows xp sp2
【目标程序】进程执法官2.50【用到工具】OD,Peid
【脱壳目的】偶菜菜呀就是想啊想玩玩,飞呀飞,一切都是为了学习^_^!
【文件下载】http:// www.firebug.org.cn/download.asp
软件简单介绍:
进程执法官是一款强悍的手工杀毒与系统监控软件。它通过对应用程序、普通进程、网络进程、隐藏进程、关键系统目录、启动项、系统用户、共享目录等系统关键资源的实时监视与查杀,确保系统的安全,让各类非法进程无所遁形。“进程执法官”将帮你简单的解决所有的进程问题,无论你是新手还是老手,都可以通过执法官提供的大量进程资料,准确定位非法进程,确保系统安全,弥补防火墙和杀毒软件的不足。

支持平台:Win2000/XP/2003 任何版本
最新版本:V2.0个人正式版

官方主页:http:// www.firebug.org.cn /
官方论坛:http:// www.firebug.org.cn/forum/
官方下载:http://

使用Peid查壳显示为:ASPack 2.12 -> Alexey Solodovnikov
运行目标程序程序,输入注册信息,提示再次点击注册看看是否注册,好再次来点击注册,没有注册的。
用户名:i386 information security team of china
注册码:123456

留心的朋友就会发现该目标程序目录下会自动生成有一个INI文件,使用记事本看看里面的信息,而且果不其然的里面有我们刚才填入的注册信息,好,破解思路来了,那么,下面开始追码吧。载入目标程序于OD中,在命令行下输入bp GetPrivateProfileStringA,F9运行程序(偶这里使用键盘了),大概F9运行66次就到达返回时机了,注意看堆栈窗口出现如下信息即是了:

0012D30C73DCA45F /CALL 到 GetPrivateProfileStringA 来自 mfc42.73DCA459
0012D3100047416C |Section = "RigisterSettings"
0012D31400474180 |Key = "user"
0012D31873E0E564 |Default = ""
0012D31C0012D350 |ReturnBuffer = 0012D350
0012D32000001000 |BufSize = 1000 (4096.)
0012D32400DB2E98 \IniFileName = "C:\Documents and Settings\Administrator\桌面\jczfg\进程

执法官2.50压缩包\PJudger.ini"

好,到此ALT+F9返回,F8往下单步,又回到断点处,再ALT+F9返回,代码及其分析如下:

0041CB2D50       PUSH EAX
0041CB2E8D4C24 14    LEA ECX,DWORD PTR SS:
0041CB32C64424 38 06MOV BYTE PTR SS:,6
0041CB37E8 58910300   CALL PJudger.00455C94      
0041CB3C8D4C24 20    LEA ECX,DWORD PTR SS:
0041CB40885C24 34    MOV BYTE PTR SS:,BL
0041CB44E8 45910300   CALL PJudger.00455C8E      
0041CB498B4424 18    MOV EAX,DWORD PTR SS: //取机器码赋值给EAX寄存器
0041CB4D8B4C24 14    MOV ECX,DWORD PTR SS: //取用户名赋值给ECX寄存器
0041CB5150       PUSH EAX
0041CB5251       PUSH ECX
0041CB538D5424 14    LEA EDX,DWORD PTR SS:
0041CB5768 545F4700   PUSH PJudger.00475F54         
0041CB5C52       PUSH EDX
0041CB5DE8 D6920300   CALL PJudger.00455E38         
0041CB6283C4 10   ADD ESP,10
0041CB658D4C24 1C    LEA ECX,DWORD PTR SS:
0041CB69E8 52540100   CALL PJudger.00431FC0
0041CB6E6A 0C      PUSH 0C
0041CB70C64424 38 07MOV BYTE PTR SS:,7
0041CB756A 00      PUSH 0
0041CB778D4424 2C    LEA EAX,DWORD PTR SS:
0041CB7B50       PUSH EAX
0041CB7C51       PUSH ECX
0041CB7D8D5424 1C    LEA EDX,DWORD PTR SS:
0041CB818BCC      MOV ECX,ESP
0041CB83896424 38    MOV DWORD PTR SS:,ESP
0041CB8752       PUSH EDX
0041CB88E8 A5920300   CALL PJudger.00455E32         
0041CB8D8D4424 38    LEA EAX,DWORD PTR SS:
0041CB9150       PUSH EAX
0041CB92E8 69540100   CALL PJudger.00432000
0041CB9783C4 08   ADD ESP,8
0041CB9A8BC8      MOV ECX,EAX
0041CB9CC64424 40 08MOV BYTE PTR SS:,8
0041CBA1E8 C8920300   CALL PJudger.00455E6E         
0041CBA68BF0      MOV ESI,EAX
0041CBA86A 0C      PUSH 0C
0041CBAA8D4C24 24    LEA ECX,DWORD PTR SS:
0041CBAE6A 00      PUSH 0
0041CBB051       PUSH ECX
0041CBB18D4C24 1C    LEA ECX,DWORD PTR SS:
0041CBB5C64424 40 09MOV BYTE PTR SS:,9
0041CBBAE8 AF920300   CALL PJudger.00455E6E         
0041CBBF8B36      MOV ESI,DWORD PTR DS: //×注意×开始出现注册码了
0041CBC1 > 8B00      MOV EAX,DWORD PTR DS: 把假的注册码赋值给了EAX
0041CBC356       PUSH ESI //此下的几句都可以做注册机,在ESI中(偶在此选择)
0041CBC450       PUSH EAX
0041CBC5FF15 34FC4500CALL DWORD PTR DS:      
0041CBCB83C4 08   ADD ESP,8
0041CBCE8D4C24 20    LEA ECX,DWORD PTR SS:
0041CBD285C0      TEST EAX,EAX
0041CBD40F944424 0B   SETE BYTE PTR SS:
0041CBD9E8 B0900300   CALL PJudger.00455C8E         
0041CBDE8D4C24 24    LEA ECX,DWORD PTR SS:
0041CBE2C64424 34 08MOV BYTE PTR SS:,8
0041CBE7E8 A2900300   CALL PJudger.00455C8E         
0041CBEC8D4C24 28    LEA ECX,DWORD PTR SS:
0041CBF0C64424 34 07MOV BYTE PTR SS:,7
0041CBF5E8 94900300   CALL PJudger.00455C8E         
0041CBFA8A4424 0B    MOV AL,BYTE PTR SS:
0041CBFE885C24 34    MOV BYTE PTR SS:,BL
0041CC0284C0      TEST AL,AL
0041CC048D4C24 1C    LEA ECX,DWORD PTR SS:
0041CC0874 56      JE SHORT PJudger.0041CC60//很可疑的爆破点,但偶没深入了!
0041CC0AE8 E1530100   CALL PJudger.00431FF0
0041CC0F8D4C24 0C    LEA ECX,DWORD PTR SS:
0041CC13C64424 34 02MOV BYTE PTR SS:,2
0041CC18E8 71900300   CALL PJudger.00455C8E         
0041CC1D8D4C24 10    LEA ECX,DWORD PTR SS:
0041CC21C64424 34 01MOV BYTE PTR SS:,1
0041CC26E8 63900300   CALL PJudger.00455C8E         
0041CC2B8D4C24 14    LEA ECX,DWORD PTR SS:
0041CC2FC64424 34 00MOV BYTE PTR SS:,0
0041CC34E8 55900300   CALL PJudger.00455C8E         
0041CC398D4C24 18    LEA ECX,DWORD PTR SS:
0041CC3DC74424 34 FFFFF>MOV DWORD PTR SS:,-1
0041CC45E8 44900300   CALL PJudger.00455C8E         
0041CC4AB8 01000000   MOV EAX,1
0041CC4F8B4C24 2C    MOV ECX,DWORD PTR SS:
0041CC5364:890D 0000000>MOV DWORD PTR FS:,ECX
0041CC5A5E       POP ESI
0041CC5B5B       POP EBX
0041CC5C83C4 30   ADD ESP,30
0041CC5FC3       RETN

追码结果如下--->

用户名:i386 information security team of china
机器码:WDC WD800BB-00JHC0
注册码:1A794D52470C

做注册机偶选择如下(好几处,大家看着喜欢选择做):

寄存方式:ESI
中断地址:0041CBC356      
字节长度:1
第一字节:56   
【总结如下】注册信息保存在INI文件,有点类似ini文件类型重启验证注册,但又有点不一样,关键是下好断点,找到返回时机(这点很重要)。当然认真地分析代码也是关键!
屏幕录像下载:
http://www.namipan.com/d/ini%e6%96%87%e4%bb%b6%e7%b1%bb%e5%9e%8b%e9%aa%8c%e8%af%81%e5%b8%

a6%e5%a3%b3%e7%a0%b4%e8%a7%a3%e4%b8%80%e4%be%

8b.zip/d0baae20d222dc4913bdc85ccf2b6ed036b1db2f6dffc900

wesley 发表于 2008-4-26 21:13

我刚开始用的也是INI断点....后来发现这浪费太多时间了....直接在第二次读取INI的地方(字符串中就有)下断就行...然后回溯.....注册码是明码.....很快

lonefa 发表于 2011-6-30 13:17

支持下楼主,继续加油啊!!!!!
页: [1]
查看完整版本: ini文件类型验证带壳破解一例