- UID
- 17574
注册时间2006-7-6
阅读权限40
最后登录1970-1-1
独步武林
该用户从未签到
|
发表于 2006-11-13 21:42:07
|
显示全部楼层
【破文标题】 大头贴制作系统 V4.8 脱壳 爆破
【破文作者】 https://www.chinapyg.com/ 论坛 ID ww-jack
【作者邮箱】 [email protected]
【使用工具】PEiD 0.94 ImportREC LordPE Deluxe WinHex
【脱壳平台】 Windows xp sp2
【软件名称】 大头贴制作系统 V4.8
【下载页面】 http://www.chinasoftware.cn/
【软件简介】 大头帖制作软件
【软件大小】 20几M
【加壳方式】 Version: ASProtect 2.3 SKE build 06.26 Beta [Extract]
【脱壳声明】第一次写破文 水平有限 勿笑
【脱壳篇】
废话少说老规矩先PEID看看 结果显示 ASProtect V2.X Registered -> Alexey Solodovnikov [Overlay] * 用 PEID 的 ASProtect 版本插件看是 Version: ASProtect 2.3 SKE build 06.26 Beta [Extract] 这个版本应该是最新版本的ASProtect 。
既然是 ASProtect 2.X 当然用 OD 配合 VolX 大侠的 Aspr2.XX_IATfixer_v2.2s 脚本。用这个脱“爽”
OD 载入大头贴制作系统.exe 不分析,隐藏 OD 运行脚本 (需要 ODBGScript 1.47) 运行结束。
02450247 55 push ebp ; 000403831 停在这里不要解释吧
在大头贴目录里已经有了un_大头贴制作系统.exe不需要我们再抓,如果没有自己抓吧。
打开 Script log Windows 窗口
启动 ImportREC OEP RVA SIZE 按照上面的添(不要自动查找) 都给计算好了 呵呵 方便啊 、
获取输入表 显示无效(这个没有无效 有的ASProtect加壳需要剪切(可以利用插件跟踪ASProtect的特定函数)) 修复转储 退出 ImportREC。
试运行不能运行。
下面要进行补段
切换到 OD 界面 ALT+M 00E80000 至 02700000 F2设置访问断点 这里下段地方比较多 需要有耐性。
记录下
最小地址 00E80000
最大地址 02700000
接下来F9 运行看看中断在哪里并把地址记录 请注意地址要按重小到大排列
F9直到运行 共记录了下面几处地址
012E0000
01340000
01470000
02450000
026F0000
02700000
下面我们要修复区段 工具 LordPE 选中 大头帖系统.EXE ->区域转存 找到上面地址 然后转存区域请记住文件名和区段地址一致一会还要用来增加区段。
可以关掉OD了 LordPE –>PE编辑器->载入ImportREC修复的大头帖程序->区段->从磁盘载入段
载入顺序要和中断顺序一至。
计算虚拟地址
012E0000 – 400000=EE0000
01340000 – 400000=F40000
01470000 – 400000=1070000
02450000 – 400000=2050000
026F0000 – 400000=22F0000
02700000 – 400000=2300000
修改一下虚拟地址
把刚才磁盘载入的区段都改一下。
再修复一下
OD再次载入修复过的文件
在载入段的地方 F2
3次 F9 中断后
F8直到出现
01304CEF 8B73 30 mov esi,dword ptr ds:[ebx+30] ; un_大头?0245252C
01304CF2 8B7B 14 mov edi,dword ptr ds:[ebx+14]
01304CF5 A1 D02B3201 mov eax,dword ptr ds:[1322BD0]
01304CFA 8B40 34 mov eax,dword ptr ds:[eax+34] ; nop掉这里
01304CFD FFD0 call eax ; nop掉这里
01304CFF 2945 0C sub dword ptr ss:[ebp+C],eax ; nop掉这里
01304D02 8B45 0C mov eax,dword ptr ss:[ebp+C] ; sub eax,5
01304D05 2B43 18 sub eax,dword ptr ds:[ebx+18]
01304D08 2B43 68 sub eax,dword ptr ds:[ebx+68]
//----------------------------------------------------------------------------------------------------------------------------------------
修改后是这样
01304CF5 A1 D02B3201 mov eax,dword ptr ds:[1322BD0]
01304CFA 90 nop ; nop掉这里
01304CFB 90 nop
01304CFC 90 nop
01304CFD 8B4424 58 mov eax,dword ptr ss:[esp+58] ; mov eax,dword ptr ss:[esp+58]
01304D01 90 nop
01304D02 83E8 05 sub eax,5 ; sub eax,5
01304D05 2B43 90 sub eax,dword ptr ds:[ebx-70]
01304D08 2B43 68 sub eax,dword ptr ds:[ebx+68]
01304D0B 8945 FC mov dword ptr ss:[ebp-4],eax
然后选择部分保存到文件
运行
提示错误!!
这个东西是E语言的东西还要修复一下
用winhex 打开未脱壳文件从最下面开始搜索 16 进制 代码 000000000000
找到后定义块到文件结尾复制粘贴到脱壳后的文件尾部
运行后还是无反应。
【爆破篇】
完成 OD 再次载入
下断
这是易语言的东西。
几次F9后就退出了。
再次再入
最后一次F9-1次
堆栈
0012F64C 100B0940 /CALL 到 CreateFileA 来自 krnln.100B093A
0012F650 02D87AC8 |FileName = "C:\Program Files\大头贴制作系统\un_大头贴制作系统_un.exe"
0012F654 80000000 |Access = GENERIC_READ
0012F658 00000001 |ShareMode = FILE_SHARE_READ
0012F65C 0012F77C |pSecurity = 0012F77C
0012F660 00000003 |Mode = OPEN_EXISTING
0012F664 00000080 |Attributes = NORMAL
0012F668 00000000 \hTemplateFile = NULL
CTRL+F9返回主程序段
00880872 C3 RETN 返回到这里
00880873 55 PUSH EBP
00880874 8BEC MOV EBP,ESP
00880876 81EC 0C000000 SUB ESP,0C
0088087C 68 04000080 PUSH 80000004
00880881 6A 00 PUSH 0
00880883 A1 B003D902 MOV EAX,DWORD PTR DS:[2D903B0]
00880888 85C0 TEST EAX,EAX
0088088A 75 05 JNZ SHORT 大头贴制.00880891
0088088C B8 91B84000 MOV EAX,大头贴制.0040B891
F8
008C703F 55 PUSH EBP
008C7040 8BEC MOV EBP,ESP
008C7042 81EC 08000000 SUB ESP,8
008C7048 F9 STC
008C7049 72 01 JB SHORT 大头贴制.008C704C
F8
008C704C E8 6896FBFF CALL 大头贴制.008806B9 //F7进去
008C7051 8945 FC MOV DWORD PTR SS:[EBP-4],EAX
008C7054 EB 01 JMP SHORT 大头贴制.008C7057
008C7056 ^ 7D 83 JGE SHORT 大头贴制.008C6FDB
008C7058 ^ 7D FC JGE SHORT 大头贴制.008C7056
008C705A 000F ADD BYTE PTR DS:[EDI],CL
008C705C 850D 000000EB TEST DWORD PTR DS:[EB000000],ECX
008C7062 01B2 6A00E8CD ADD DWORD PTR DS:[EDX+CDE8006A],ESI
008C7068 C501 LDS EAX,FWORD PTR DS:[ECX] ; 修改段寄存器
008C706A 0083 C404EB01 ADD BYTE PTR DS:[EBX+1EB04C4],AL
008C7070 74 6A JE SHORT 大头贴制.008C70DC
:
0088083B /E9 0D000000 JMP 大头贴制.0088084D 到这里
00880840 |EB 01 JMP SHORT 大头贴制.00880843
00880842 |BC B8010000 MOV ESP,1B8
00880847 |00E9 ADD CL,CH
00880849 |0000 ADD BYTE PTR DS:[EAX],AL
0088084B |0000 ADD BYTE PTR DS:[EAX],AL
0088084D \50 PUSH EAX 这里下断 以后用的到
0088084E 8B5D FC MOV EBX,DWORD PTR SS:[EBP-4]
00880851 85DB TEST EBX,EBX
00880853 74 09 JE SHORT 大头贴制.0088085E
00880855 53 PUSH EBX
00880856 E8 F52D0600 CALL 大头贴制.008E3650
0088085B 83C4 04 ADD ESP,4
F8
008C7051 8945 FC MOV DWORD PTR SS:[EBP-4],EAX //注意这里
008C7054 EB 01 JMP SHORT un_大头?008C7057
008C7056 ^ 7D 83 JGE SHORT un_大头?008C6FDB
008C7058 ^ 7D FC JGE SHORT un_大头?008C7056
008C705A 000F ADD BYTE PTR DS:[EDI],CL
008C705C 850D 000000EB TEST DWORD PTR DS:[EB000000],ECX
008C7062 01B2 6A00E8CD ADD DWORD PTR DS:[EDX+CDE8006A],ESI
008C7068 C501 LDS EAX,FWORD PTR DS:[ECX] ; 段位寄存器修饰
008C706A 0083 C404EB01 ADD BYTE PTR DS:[EBX+1EB04C4],AL
008C7070 74 6A JE SHORT un_大头?008C70DC
008C7072 0068 01 ADD BYTE PTR DS:[EAX+1],CH
008C7075 0000 ADD BYTE PTR DS:[EAX],AL
008C7077 006A FF ADD BYTE PTR DS:[EDX-1],CH
008C707A 6A 05 PUSH 5
008C707C 68 58070106 PUSH 6010758
008C7081 68 59070152 PUSH 52010759
008C7057 837D FC 00 CMP DWORD PTR SS:[EBP-4],0
008C705B 0F85 0D000000 JNZ un_大头?008C706E //这里就跳死了
008C7061 EB 01 JMP SHORT un_大头?008C7064
008C7063 B2 6A MOV DL,6A
008C7065 00E8 ADD AL,CH
//-------------------------
望上看找到这里
008C7042 81EC 08000000 SUB ESP,8 我们在这里下断
008C7048 F9 STC
008C7049 72 01 JB SHORT un_大头?008C704C
008C704B 0FE868 96 PSUBSB MM5,QWORD PTR DS:[EAX-6A]
008C704F FB STI
008C7050 FF89 45FCEB01 DEC DWORD PTR DS:[ECX+1EBFC45]
008C7056 ^ 7D 83 JGE SHORT un_大头?008C6FDB
008C7058 ^ 7D FC JGE SHORT un_大头?008C7056
008C705A 000F ADD BYTE PTR DS:[EDI],CL
008C705C 850D 000000EB TEST DWORD PTR DS:[EB000000],ECX
008C7062 01B2 6A00E8CD ADD DWORD PTR DS:[EDX+CDE8006A],ESI
008C7068 C501 LDS EAX,FWORD PTR DS:[ECX] ; 段位寄存器修饰
008C706A 0083 C404EB01 ADD BYTE PTR DS:[EBX+1EB04C4],AL
008C7070 74 6A JE SHORT un_大头?008C70DC
008C7072 0068 01 ADD BYTE PTR DS:[EAX+1],CH
008C7075 0000 ADD BYTE PTR DS:[EAX],AL
008C7077 006A FF ADD BYTE PTR DS:[EDX-1],CH
008C707A 6A 05 PUSH 5
008C707C 68 58070106 PUSH 6010758
008C7081 68 59070152 PUSH 52010759
008C7086 E8 D7C50100 CALL un_大头?008E3662
008C708B 83C4 18 ADD ESP,18
重新载入
008C704C E8 6896FBFF CALL un_大头?008806B9 //这个CALL 进去
008C7051 8945 FC MOV DWORD PTR SS:[EBP-4],EAX
008C7054 EB 01 JMP SHORT un_大头?008C7057
008C7056 ^ 7D 83 JGE SHORT un_大头?008C6FDB
008C7058 ^ 7D FC JGE SHORT un_大头?008C7056
008C705A 000F ADD BYTE PTR DS:[EDI],CL
008C705C 850D 000000EB TEST DWORD PTR DS:[EB000000],ECX
008C7062 01B2 6A00E8CD ADD DWORD PTR DS:[EDX+CDE8006A],ESI
008C7068 C501 LDS EAX,FWORD PTR DS:[ECX] ; 段位寄存器修饰
00880836 B8 00000000 MOV EAX,0 到这里修改成 MOV EAX,1
0088083B E9 0D000000 JMP un_大头?0088084D
00880840 EB 01 JMP SHORT un_大头?00880843
00880842 BC B8010000 MOV ESP,1B8
00880847 00E9 ADD CL,CH
00880849 0000 ADD BYTE PTR DS:[EAX],AL
0088084B 0000 ADD BYTE PTR DS:[EAX],AL
0088084D 50 PUSH EAX
0088084E 8B5D FC MOV EBX,DWORD PTR SS:[EBP-4]
00880851 85DB TEST EBX,EBX
00880853 74 09 JE SHORT un_大头?0088085E
00880855 53 PUSH EBX
00880856 E8 F52D0600 CALL un_大头?008E3650
0088085B 83C4 04 ADD ESP,4
0088085E 8B5D F8 MOV EBX,DWORD PTR SS:[EBP-8]
00880861 85DB TEST EBX,EBX
00880863 74 09 JE SHORT un_大头?0088086E
00880865 53 PUSH EBX
00880866 E8 E52D0600 CALL un_大头?008E3650
0088086B 83C4 04 ADD ESP,4
0088086E 58 POP EAX
0088086F 8BE5 MOV ESP,EBP
00880871 5D POP EBP
00880872 C3 RETN
00880873 55 PUSH EBP
00880874 8BEC MOV EBP,ESP
00880876 81EC 0C000000 SUB ESP,0C
0088087C 68 04000080 PUSH 80000004
00880881 6A 00 PUSH 0
修改EXE用WINHEX修改
搜索
B800000000E90D000000EB01BCB801000000E9
改成
B801000000E90D000000EB01BCB801000000E9
保存这下子可以启动了
现在我们要把他变成注册版
这个程序很多地方要自校验看看是不是被人家脱壳。
我们注册的时候他也看 正好我们利用这个下断
还是在
00880941 35 2D060083 XOR EAX,8300062D
00880946 C43489 LES ESI,FWORD PTR DS:[ECX+ECX*4] ; 修改段寄存器
00880949 45 INC EBP
0088094A F4 HLT ; 特权级命令
0088094B 8B5D FC MOV EBX,DWORD PTR SS:[EBP-4]
0088094E 85DB TEST EBX,EBX
00880950 74 09 JE SHORT 大头贴制.0088095B
00880952 53 PUSH EBX
00880953 E8 F82C0600 CALL 大头贴制.008E3650
00880958 83C4 04 ADD ESP,4
0088095B 8B5D F8 MOV EBX,DWORD PTR SS:[EBP-8]
0088095E 85DB TEST EBX,EBX
00880960 74 09 JE SHORT 大头贴制.0088096B
00880962 53 PUSH EBX
00880963 E8 E82C0600 CALL 大头贴制.008E3650
00880968 83C4 04 ADD ESP,4
0088096B 837D F4 01 CMP DWORD PTR SS:[EBP-C],0 // CMP DWORD PTR SS:[EBP-C],1这里改下就OK了哦
0088096F 0F84 13000000 JE 大头贴制.00880988
一样道理Winhex查找修改JMP也可以呵呵!~
这个程序不能用反汇编工具修改!~
感觉易语言是编译了一个文件头然后把易语言的 代码解压缩 后在执行所以反汇编只能出来文件执行部
分。//0088084D \50 PUSH EAX 这里下断 以后用的到
00880975 F8 CLC
00880976 73 01 JNB SHORT 大头贴制.00880979
00880978 0FB8 ??? ; 未知命令
0088097A 0100 ADD DWORD PTR DS:[EAX],EAX
0088097C 0000 ADD BYTE PTR DS:[EAX],AL
0088097E E9 12000000 JMP 大头贴制.00880995
00880983 E9 0D000000 JMP 大头贴制.00880995
00880988 EB 01 JMP SHORT 大头贴制.0088098B
0088098A 0FB8 ??? ; 未知命令
0088098C 0000 ADD BYTE PTR DS:[EAX],AL
0088098E 0000 ADD BYTE PTR DS:[EAX],AL
00880990 E9 00000000 JMP 大头贴制.00880995
00880995 8BE5 MOV ESP,EBP
00880997 5D POP EBP
00880998 C3 RETN
00880999 55 PUSH EBP
0088099A 8BEC MOV EBP,ESP
0088099C F8 CLC
0088099D 73 01 JNB SHORT 大头贴制.008809A0
很多东西只能跟过才有感觉,水平有限只能做不会说呵呵!~(这里说的比较乱呵呵!~没整理不好意思大概意思出来了只要跟下就可以明白,也是介绍一个方法)
这样的帖子不要打包上传,直接贴上即可...另外申请PYG不是在这里发贴,到申请区去!:L |
|