【破文标题】ABC Amber Excel Converter 2.05 多国语言两种脱壳分析
【破文作者】HBQJXHW
【破解工具】PEID,OD,LordPE,ImportREC
【破解平台】Winxp-sp2
【软件名称】ABC Amber Excel Converter 2.05 多国语言
【软件大小】1389KB
【原版下载】http://www.onlinedown.net/soft/28806.htm
【保护方式】壳
【软件简介】ABC Amber Excel Converter是一个可以帮助你快速方便的将XLS文件 (MS Excel)很多格式(DBF, CSV, XML, PDF, HTML, CHM,
RTF, HLP, DOC等),方便你保存收藏,程序内置了对近50种语言的支持,其中包括简体中文和繁体中文!
【破解声明】我是一只小菜鸟,偶得一点心得,愿与大家分享:)
参照了fly、lchhome 、weiyi75[Dfcg]等等。在此谢谢了。
------------------------------------------------------------------------
第一步:用PEID载入软件为ASProtect 1.2 / 1.2c-> Alexey Solodovnikov [Overlay]。
第二步:OD不忽略内存访问异常,其余全忽略,隐藏OD,载入程序:
00401000 > 68 01F06F00 PUSH abcexcel.006FF001 ;停在此处
00401005 C3 RETN
00401006 A2 8034479C MOV BYTE PTR DS:[9C473480],AL
0040100B E7 9E OUT 9E,EAX ; I/O 命令
0040100D 49 DEC ECX
0040100E 3C 90 CMP AL,90
按Shift+F9运行、第一次停在这里。
010C009D 3100 XOR DWORD PTR DS:[EAX],EAX ;异常在这里
010C009F EB 01 JMP SHORT 010C00A2
010C00A1 68 648F0500 PUSH 58F64
010C00A6 0000 ADD BYTE PTR DS:[EAX],AL
继续按Shift+F9运行,注意观察堆栈区
我按了十七次,看堆栈区
0012D738 0012D740 指向下一个 SEH 记录的指针
0012D73C 010C0217 SE处理程序
0012D740 0012FFE0 指向下一个 SEH 记录的指针
0012D744 010C0A6F SE处理程序
0012D748 0012FF90
0012D74C 010B0000
0012D750 01090000
0012D754 010C0038
0012D758 00000000
0012D75C 010D737C ASCII "Aw8xPQBAGNw=" ;出现硬盘指纹
继续按Shift+F9运行一次 ,再看堆栈区
0012D738 0012D740 指向下一个 SEH 记录的指针
0012D73C 010C09E2 SE处理程序
0012D740 0012FFE0 指向下一个 SEH 记录的指针
0012D744 010C0A6F SE处理程序
0012D748 0012FF90
0012D74C 010B0000
0012D750 01090000
0012D754 010C0038
0012D758 00000000
0012D75C 010D73D8 ASCII "SOFTWARE\ProcessText Group\Excel Converter"硬盘指纹消失
0012D760 00000000
此时注意了:
010C0A2B 3100 XOR DWORD PTR DS:[EAX],EAX ;异常停在此处
010C0A2D EB 01 JMP SHORT 010C0A30
010C0A2F 68 648F0500 PUSH 58F64
010C0A34 0000 ADD BYTE PTR DS:[EAX],AL
010C0A36 00EB ADD BL,CH
010C0A38 02E8 ADD CH,AL
010C0A3A 0158 33 ADD DWORD PTR DS:[EAX+33],EBX
010C0A3D C05A 59 59 RCR BYTE PTR DS:[EDX+59],59 ; 移位常量超出 1..31 的范围
010C0A41 64:8910 MOV DWORD PTR FS:[EAX],EDX
010C0A44 68 760A0C01 PUSH 10C0A76
010C0A49 8D85 C8D7FFFF LEA EAX,DWORD PTR SS:[EBP-2838]
010C0A4F BA 02000000 MOV EDX,2
010C0A54 E8 5727FFFF CALL 010B31B0
010C0A59 8D45 C8 LEA EAX,DWORD PTR SS:[EBP-38]
010C0A5C E8 2F27FFFF CALL 010B3190
010C0A61 8D45 D0 LEA EAX,DWORD PTR SS:[EBP-30]
010C0A64 BA 02000000 MOV EDX,2
010C0A69 E8 4227FFFF CALL 010B31B0
010C0A6E C3 RETN
010C0A6F ^ E9 7423FFFF JMP 010B2DE8
010C0A74 ^ EB D3 JMP SHORT 010C0A49
010C0A76 5F POP EDI
010C0A77 5E POP ESI
010C0A78 5B POP EBX
010C0A79 8BE5 MOV ESP,EBP
010C0A7B 5D POP EBP
010C0A7C C3 RETN 在此下断,Shift+F9运行,中断了,F7返回010BDFB0
010BDFB0 68 952D21FD PUSH FD212D95 ;返回在此
010BDFB5 68 680F0000 PUSH 0F68
010BDFBA 68 44D00000 PUSH 0D044
010BDFBF 68 00600100 PUSH 16000
010BDFC4 FF35 14300C01 PUSH DWORD PTR DS:[10C3014]
010BDFCA E8 71E8FFFF CALL 010BC840
010BDFCF 310424 XOR DWORD PTR SS:[ESP],EAX
010BDFD2 8B05 14300C01 MOV EAX,DWORD PTR DS:[10C3014]
010BDFD8 010424 ADD DWORD PTR SS:[ESP],EAX
010BDFDB C3 RETN
010BDFDC C3 RETN
AIT+M,找到00401000句,按F2下断
内存映射, 条目 23
地址=00401000
大小=0025D000 (2478080.)
属主=abcexcel 00400000
区段=
包含=代码
类型=Imag 01001002
访问=R
初始访问=RWE
Shift+f9运行三次,来到OEP处
0065DBC4 55 PUSH EBP 来到此处,为OEP
0065DBC5 8BEC MOV EBP,ESP
0065DBC7 81C4 E8FEFFFF ADD ESP,-118
0065DBCD 53 PUSH EBX
0065DBCE 56 PUSH ESI
0065DBCF 33C0 XOR EAX,EAX
0065DBD1 8945 E8 MOV DWORD PTR SS:[EBP-18],EAX
0065DBD4 8945 F0 MOV DWORD PTR SS:[EBP-10],EAX
0065DBD7 8945 EC MOV DWORD PTR SS:[EBP-14],EAX
0065DBDA B8 4CD46500 MOV EAX,abcexcel.0065D44C
0065DBDF E8 54A6DAFF CALL abcexcel.00408238
0065DBE4 33C0 XOR EAX,EAX
0065DBE6 55 PUSH EBP
0065DBE7 68 AEDC6500 PUSH abcexcel.0065DCAE
0065DBEC 64:FF30 PUSH DWORD PTR FS:[EAX]
0065DBEF 64:8920 MOV DWORD PTR FS:[EAX],ESP
0065DBF2 8D55 EC LEA EDX,DWORD PTR SS:[EBP-14]
0065DBF5 33C0 XOR EAX,EAX
0065DBF7 E8 1C50DAFF CALL abcexcel.00402C18
0065DBFC 8B45 EC MOV EAX,DWORD PTR SS:[EBP-14]
0065DBFF 8D4D F0 LEA ECX,DWORD PTR SS:[EBP-10]
0065DC02 BA C4DC6500 MOV EDX,abcexcel.0065DCC4 ; ASCII ".INI"
0065DC07 E8 B4D2DAFF CALL abcexcel.0040AEC0
0065DC0C 8B4D F0 MOV ECX,DWORD PTR SS:[EBP-10]
0065DC0F B2 01 MOV DL,1
0065DC11 A1 7C024600 MOV EAX,DWORD PTR DS:[46027C]
0065DC16 E8 0927E0FF CALL abcexcel.00460324
0065DC1B 8BD8 MOV EBX,EAX
0065DC1D 6A 00 PUSH 0
0065DC1F B9 D4DC6500 MOV ECX,abcexcel.0065DCD4 ; ASCII "MultipleInstances"
0065DC24 BA F0DC6500 MOV EDX,abcexcel.0065DCF0 ; ASCII "Application"
0065DC29 8BC3 MOV EAX,EBX
0065DC2B 8B30 MOV ESI,DWORD PTR DS:[EAX]
0065DC2D FF56 10 CALL DWORD PTR DS:[ESI+10]
0065DC30 8B15 EC826600 MOV EDX,DWORD PTR DS:[6682EC] ; abcexcel.0066A681
0065DC36 8802 MOV BYTE PTR DS:[EDX],AL
0065DC38 8BC3 MOV EAX,EBX
0065DC3A E8 2957DAFF CALL abcexcel.00403368
0065DC3F A1 EC826600 MOV EAX,DWORD PTR DS:[6682EC]
0065DC44 8038 00 CMP BYTE PTR DS:[EAX],0
0065DC47 75 2C JNZ SHORT abcexcel.0065DC75
0065DC49 8D95 E8FEFFFF LEA EDX,DWORD PTR SS:[EBP-118]
0065DC4F A1 ECCD6400 MOV EAX,DWORD PTR DS:[64CDEC]
0065DC54 E8 5756DAFF CALL abcexcel.004032B0
0065DC59 8D95 E8FEFFFF LEA EDX,DWORD PTR SS:[EBP-118]
0065DC5F 8D45 E8 LEA EAX,DWORD PTR SS:[EBP-18]
0065DC62 E8 6967DAFF CALL abcexcel.004043D0
0065DC67 8B45 E8 MOV EAX,DWORD PTR SS:[EBP-18]
0065DC6A 33D2 XOR EDX,EDX
0065DC6C E8 8B22E0FF CALL abcexcel.0045FEFC
0065DC71 84C0 TEST AL,AL
0065DC73 75 1E JNZ SHORT abcexcel.0065DC93
0065DC75 A1 30856600 MOV EAX,DWORD PTR DS:[668530]
0065DC7A 8B00 MOV EAX,DWORD PTR DS:[EAX]
0065DC7C E8 9BA4DFFF CALL abcexcel.0045811C
0065DC81 FF15 247C6600 CALL DWORD PTR DS:[667C24] ;这个地方要注意,以后有用。
0065DC87 A1 30856600 MOV EAX,DWORD PTR DS:[668530]
0065DC8C 8B00 MOV EAX,DWORD PTR DS:[EAX]
0065DC8E E8 21A5DFFF CALL abcexcel.004581B4
0065DC93 33C0 XOR EAX,EAX
0065DC95 5A POP EDX
0065DC96 59 POP ECX
0065DC97 59 POP ECX
0065DC98 64:8910 MOV DWORD PTR FS:[EAX],EDX
0065DC9B 68 B5DC6500 PUSH abcexcel.0065DCB5
0065DCA0 8D45 E8 LEA EAX,DWORD PTR SS:[EBP-18]
0065DCA3 BA 03000000 MOV EDX,3
0065DCA8 E8 2365DAFF CALL abcexcel.004041D0
0065DCAD C3 RETN
第三步:用OD插件DUMP它。程序不能运行,再用ImportREC 载入程序,OEP=25DBC4,点“IAT自动搜索”
――“获得输入信息”,有很多无效指针,先用“追踪等级1级”修复,再用插件ASProtect 1.22追踪,OK全部为有效指针,修复它吧!
第四步:运行修复后的程序还是不能正常运行,用OD载入修复后的程序,F9运行,出现异常
注意堆栈区
0012FE90 0065DC87 返回到 dumped_.<模块入口点>+0C3 来自 010BC784 注意这行
0012FE94 0012FFB4 指向下一个 SEH 记录的指针
0012FE98 0065DCAE SE处理程序
0012FE9C 0012FFC0
---------------------------------------
0065DBC4 >/$ 55 PUSH EBP
0065DBC5 |. 8BEC MOV EBP,ESP
0065DBC7 |. 81C4 E8FEFFFF ADD ESP,-118
0065DBCD |. 53 PUSH EBX
0065DBCE |. 56 PUSH ESI
0065DBCF |. 33C0 XOR EAX,EAX
0065DBD1 |. 8945 E8 MOV DWORD PTR SS:[EBP-18],EAX
0065DBD4 |. 8945 F0 MOV DWORD PTR SS:[EBP-10],EAX
0065DBD7 |. 8945 EC MOV DWORD PTR SS:[EBP-14],EAX
0065DBDA |. B8 4CD46500 MOV EAX,dumped_.0065D44C
0065DBDF |. E8 54A6DAFF CALL dumped_.00408238
0065DBE4 |. 33C0 XOR EAX,EAX
0065DBE6 |. 55 PUSH EBP
0065DBE7 |. 68 AEDC6500 PUSH dumped_.0065DCAE
0065DBEC |. 64:FF30 PUSH DWORD PTR FS:[EAX]
0065DBEF |. 64:8920 MOV DWORD PTR FS:[EAX],ESP
0065DBF2 |. 8D55 EC LEA EDX,DWORD PTR SS:[EBP-14]
0065DBF5 |. 33C0 XOR EAX,EAX
0065DBF7 |. E8 1C50DAFF CALL dumped_.00402C18
0065DBFC |. 8B45 EC MOV EAX,DWORD PTR SS:[EBP-14]
0065DBFF |. 8D4D F0 LEA ECX,DWORD PTR SS:[EBP-10]
0065DC02 |. BA C4DC6500 MOV EDX,dumped_.0065DCC4 ; ASCII ".INI"
0065DC07 |. E8 B4D2DAFF CALL dumped_.0040AEC0
0065DC0C |. 8B4D F0 MOV ECX,DWORD PTR SS:[EBP-10]
0065DC0F |. B2 01 MOV DL,1
0065DC11 |. A1 7C024600 MOV EAX,DWORD PTR DS:[46027C]
0065DC16 |. E8 0927E0FF CALL dumped_.00460324
0065DC1B |. 8BD8 MOV EBX,EAX
0065DC1D |. 6A 00 PUSH 0
0065DC1F |. B9 D4DC6500 MOV ECX,dumped_.0065DCD4 ; ASCII "MultipleInstances"
0065DC24 |. BA F0DC6500 MOV EDX,dumped_.0065DCF0 ; ASCII "Application"
0065DC29 |. 8BC3 MOV EAX,EBX
0065DC2B |. 8B30 MOV ESI,DWORD PTR DS:[EAX]
0065DC2D |. FF56 10 CALL DWORD PTR DS:[ESI+10]
0065DC30 |. 8B15 EC826600 MOV EDX,DWORD PTR DS:[6682EC] ; dumped_.0066A681
0065DC36 |. 8802 MOV BYTE PTR DS:[EDX],AL
0065DC38 |. 8BC3 MOV EAX,EBX
0065DC3A |. E8 2957DAFF CALL dumped_.00403368
0065DC3F |. A1 EC826600 MOV EAX,DWORD PTR DS:[6682EC]
0065DC44 |. 8038 00 CMP BYTE PTR DS:[EAX],0
0065DC47 |. 75 2C JNZ SHORT dumped_.0065DC75
0065DC49 |. 8D95 E8FEFFFF LEA EDX,DWORD PTR SS:[EBP-118]
0065DC4F |. A1 ECCD6400 MOV EAX,DWORD PTR DS:[64CDEC]
0065DC54 |. E8 5756DAFF CALL dumped_.004032B0
0065DC59 |. 8D95 E8FEFFFF LEA EDX,DWORD PTR SS:[EBP-118]
0065DC5F |. 8D45 E8 LEA EAX,DWORD PTR SS:[EBP-18]
0065DC62 |. E8 6967DAFF CALL dumped_.004043D0
0065DC67 |. 8B45 E8 MOV EAX,DWORD PTR SS:[EBP-18]
0065DC6A |. 33D2 XOR EDX,EDX
0065DC6C |. E8 8B22E0FF CALL dumped_.0045FEFC
0065DC71 |. 84C0 TEST AL,AL
0065DC73 |. 75 1E JNZ SHORT dumped_.0065DC93
0065DC75 |> A1 30856600 MOV EAX,DWORD PTR DS:[668530]
0065DC7A |. 8B00 MOV EAX,DWORD PTR DS:[EAX]
0065DC7C |. E8 9BA4DFFF CALL dumped_.0045811C
0065DC81 |. FF15 247C6600 CALL DWORD PTR DS:[667C24] ;这个Call出错了,在此下断。
0065DC87 |. A1 30856600 MOV EAX,DWORD PTR DS:[668530] ;<模块入口点>+0C3。
0065DC8C |. 8B00 MOV EAX,DWORD PTR DS:[EAX]
0065DC8E |. E8 21A5DFFF CALL dumped_.004581B4
0065DC93 |> 33C0 XOR EAX,EAX
0065DC95 |. 5A POP EDX
0065DC96 |. 59 POP ECX
0065DC97 |. 59 POP ECX
0065DC98 |. 64:8910 MOV DWORD PTR FS:[EAX],EDX
0065DC9B |. 68 B5DC6500 PUSH dumped_.0065DCB5
0065DCA0 |> 8D45 E8 LEA EAX,DWORD PTR SS:[EBP-18]
0065DCA3 |. BA 03000000 MOV EDX,3
0065DCA8 |. E8 2365DAFF CALL dumped_.004041D0
0065DCAD \. C3 RETN
-----------------------------------
OD不忽略内存访问异常,其余全忽略,隐藏OD,载入未脱壳的程序,运行到原先注意的地方。
//0065DC81 FF15 247C6600 CALL DWORD PTR DS:[667C24] ;这个地方要注意,以后有用。//
在命令行下“d 00667c24”,在数据窗口可看到
00667C24 010BC784
00667C28 0049E438 abcexcel.0049E438
00667C2C 0049E458 abcexcel.0049E458
00667C30 006634C0 abcexcel.006634C0
F7进入CALL,
010BC784 833D A8350C01 0>CMP DWORD PTR DS:[10C35A8],0
010BC78B 74 06 JE SHORT 010BC793
010BC78D FF15 A8350C01 CALL DWORD PTR DS:[10C35A8] ; abcexcel.0065D3DC
010BC793 C3 RETN
在命令行下“d 10C35A8”,在数据窗口可看到
010C35A8 0065D3DC abcexcel.0065D3DC
010C35AC 00000000
010C35B0 00000000
010C35B4 00000000
010C35B8 00000000
010C35BC 010D737C ASCII "Aw8xPQBAGNw="
好了收工。
载入脱壳后的程序
//0065DC81 |. FF15 247C6600 CALL DWORD PTR DS:[667C24] ;这个Call出错了,在此下断。//
在命令行下“d 00667c24”,在数据窗口可看到
00667C24 010BC784 这个值要修改 ,修改为“0065D3DC”
00667C28 0049E438 dumped_.0049E438
00667C2C 0049E458 dumped_.0049E458
00667C30 006634C0 dumped_.006634C0
然后复制到可执行文件,保存!
运行,OK了!
===========================================================================================
另一种方法达到OEP
第一步:用PEID载入软件为ASProtect 1.2 / 1.2c-> Alexey Solodovnikov [Overlay]。
第二步:OD不忽略内存访问异常,其余全忽略,隐藏OD,载入程序:
00401000 > 68 01F06F00 PUSH abcexcel.006FF001 ;停在此处
00401005 C3 RETN
00401006 A2 8034479C MOV BYTE PTR DS:[9C473480],AL
0040100B E7 9E OUT 9E,EAX ; I/O 命令
0040100D 49 DEC ECX
0040100E 3C 90 CMP AL,90
按Shift+F9,21下之后程序运行。好重来一下,按Shift+F9,20下。
AIT+M,找到00401000句,按F2下断
内存映射, 条目 23
地址=00401000
大小=0025D000 (2478080.)
属主=abcexcel 00400000
区段=
包含=代码
类型=Imag 01001002
访问=R
初始访问=RWE
来到OEP处
0065DBC4 55 PUSH EBP 来到此处,为OEP
0065DBC5 8BEC MOV EBP,ESP
0065DBC7 81C4 E8FEFFFF ADD ESP,-118
0065DBCD 53 PUSH EBX
0065DBCE 56 PUSH ESI
0065DBCF 33C0 XOR EAX,EAX
0065DBD1 8945 E8 MOV DWORD PTR SS:[EBP-18],EAX
0065DBD4 8945 F0 MOV DWORD PTR SS:[EBP-10],EAX
0065DBD7 8945 EC MOV DWORD PTR SS:[EBP-14],EAX
第三步:用OD插件DUMP它。程序不能运行,再用ImportREC 载入程序,OEP=25DBC4,点“IAT自动搜索”
――“获得输入信息”,有很多无效指针,先用“追踪等级1级”修复,再用插件ASProtect 1.22追踪。
最后只有一个无效指针。
当前输入函数信息:
16 (十进制:22) 增加: +1
25C (十进制:604) 输入函数
(1 (十进制:1) 无效指针(s) 增加: -1
使用反汇编/十六制为有用。
看到第一个为//=kernel32.dll/0198/GetProcAddress
好了把它改为GetProcAddress。修复它吧!
余下的与上面的第四步一样哟。省略 ... ...
------------------------------------------------------------------------
【版权声明】本文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!