【破解作者】 layper
【作者邮箱】 layper2002@yahoo.com.cn
【作者主页】 http://free4.e-168.cn/layper
【使用工具】 PEID,OD,LordPE,ImportREC
【破解平台】 Win9x/NT/2000/XP
【软件名称】 ABC Amber Excel Converter 1.20 多国语言
【下载地址】 http://www.onlinedown.net/soft/28806.htm
【软件简介】 ABC Amber Excel Converter是一个可以帮助你快速方便的将XLS文件 (MS Excel)很多格式(DBF,
CSV, XML, PDF, HTML, CHM, RTF, HLP, DOC等),方便你保存收藏,程序内置了对近50种语言的支持,其中包括
简体中文和繁体中文!
【软件大小】 1182KB
【加壳方式】 ASProtect 1.2x - 1.3x [已经注册] -> Alexey Solodovnikov
【破解声明】 我是一只小菜鸟,偶得一点心得,愿与大家分享:)
--------------------------------------------------------------------------------
【破解内容】
OD载入,忽略所有异常,隐藏OD
00401000 > 68 01B05700 push abslogde.0057B001 ;停在入口处
00401005 E8 01000000 call abslogde.0040100B
0040100A C3 retn
在命令行下:he GetModuleHandleA,Shift+F9运行两次后,清除硬件断点,Alt+F9返回到这里
00C094AC 85C0 test eax,eax ; kernel32.77E40000,返回这里
,F8单步,直到00C095D1
00C094AE 75 07 jnz short 00C094B7 ;
00C094B0 53 push ebx
00C094B1 FF95 F0314400 call dword ptr ss:[ebp+4431F0]
00C094B7 8985 4D294400 mov dword ptr ss:[ebp+44294D],eax
00C094BD C785 51294400 0>mov dword ptr ss:[ebp+442951],0
00C094C7 8B95 D8304400 mov edx,dword ptr ss:[ebp+4430D8]
00C094CD 8B06 mov eax,dword ptr ds:[esi]
00C094CF 85C0 test eax,eax
00C094D1 75 03 jnz short 00C094D6
00C094D3 8B46 10 mov eax,dword ptr ds:[esi+10]
00C094D6 03C2 add eax,edx
00C094D8 0385 51294400 add eax,dword ptr ss:[ebp+442951]
00C094DE 8B18 mov ebx,dword ptr ds:[eax]
00C094E0 8B7E 10 mov edi,dword ptr ds:[esi+10]
00C094E3 03FA add edi,edx
00C094E5 03BD 51294400 add edi,dword ptr ss:[ebp+442951]
00C094EB 85DB test ebx,ebx
00C094ED 0F84 A2000000 je 00C09595
00C094F3 F7C3 00000080 test ebx,80000000
00C094F9 75 04 jnz short 00C094FF
00C094FB 03DA add ebx,edx
00C094FD 43 inc ebx
00C094FE 43 inc ebx
00C094FF 53 push ebx
00C09500 81E3 FFFFFF7F and ebx,7FFFFFFF
00C09506 53 push ebx
00C09507 FFB5 4D294400 push dword ptr ss:[ebp+44294D]
00C0950D FF95 E8314400 call dword ptr ss:[ebp+4431E8]
00C09513 85C0 test eax,eax
00C09515 5B pop ebx
00C09516 75 6F jnz short 00C09587
00C09518 F7C3 00000080 test ebx,80000000
00C0951E 75 19 jnz short 00C09539
00C09520 57 push edi
00C09521 8B46 0C mov eax,dword ptr ds:[esi+C]
00C09524 0385 D8304400 add eax,dword ptr ss:[ebp+4430D8]
00C0952A 50 push eax
00C0952B 53 push ebx
00C0952C 8D85 53314400 lea eax,dword ptr ss:[ebp+443153]
00C09532 50 push eax
00C09533 57 push edi
00C09534 E9 99000000 jmp 00C095D2
00C09539 81E3 FFFFFF7F and ebx,7FFFFFFF
00C0953F 8B85 DC304400 mov eax,dword ptr ss:[ebp+4430DC]
00C09545 3985 4D294400 cmp dword ptr ss:[ebp+44294D],eax
00C0954B 75 24 jnz short 00C09571
00C0954D 57 push edi
00C0954E 8BD3 mov edx,ebx
00C09550 4A dec edx
00C09551 C1E2 02 shl edx,2
00C09554 8B9D 4D294400 mov ebx,dword ptr ss:[ebp+44294D]
00C0955A 8B7B 3C mov edi,dword ptr ds:[ebx+3C]
00C0955D 8B7C3B 78 mov edi,dword ptr ds:[ebx+edi+78]
00C09561 035C3B 1C add ebx,dword ptr ds:[ebx+edi+1C]
00C09565 8B0413 mov eax,dword ptr ds:[ebx+edx]
00C09568 0385 4D294400 add eax,dword ptr ss:[ebp+44294D]
00C0956E 5F pop edi
00C0956F EB 16 jmp short 00C09587
00C09571 57 push edi
00C09572 8B46 0C mov eax,dword ptr ds:[esi+C]
00C09575 0385 D8304400 add eax,dword ptr ss:[ebp+4430D8]
00C0957B 50 push eax
00C0957C 53 push ebx
00C0957D 8D85 A4314400 lea eax,dword ptr ss:[ebp+4431A4]
00C09583 50 push eax
00C09584 57 push edi
00C09585 EB 4B jmp short 00C095D2
00C09587 8907 mov dword ptr ds:[edi],eax
00C09589 8385 51294400 0>add dword ptr ss:[ebp+442951],4
00C09590 ^ E9 32FFFFFF jmp 00C094C7
00C09595 8906 mov dword ptr ds:[esi],eax
00C09597 8946 0C mov dword ptr ds:[esi+C],eax
00C0959A 8946 10 mov dword ptr ds:[esi+10],eax
00C0959D 83C6 14 add esi,14
00C095A0 8B95 D8304400 mov edx,dword ptr ss:[ebp+4430D8]
00C095A6 ^ E9 EBFEFFFF jmp 00C09496
00C095AB 8B85 652A4400 mov eax,dword ptr ss:[ebp+442A65]
00C095B1 50 push eax
00C095B2 0385 D8304400 add eax,dword ptr ss:[ebp+4430D8]
00C095B8 5B pop ebx
00C095B9 0BDB or ebx,ebx
00C095BB 8985 112F4400 mov dword ptr ss:[ebp+442F11],eax
00C095C1 61 popad
00C095C2 75 08 jnz short 00C095CC
00C095C4 B8 01000000 mov eax,1
00C095C9 C2 0C00 retn 0C
00C095CC 68 00000000 push 0
00C095D1 C3 retn ;执行到这里
接下来是避开IAT加密
Ctrl+S 搜索命令序列:
mov edx,dword ptr ss:[ebp+C]
mov edx,dword ptr ds:[edx]
mov dword ptr ds:[edx],eax
刚开始我怎么也搜索不到,后来才发现第一次搜索时要选定整个区块,接着后面的搜索再把整个区块这里去掉
,不知是否是我机子的问题
搜索得以下四处,全部下断:
(1)
00BF58CF 8B55 0C mov edx,dword ptr ss:[ebp+C]
00BF58D2 8B12 mov edx,dword ptr ds:[edx]
00BF58D4 8902 mov dword ptr ds:[edx],eax
(2)
00BF593F 8B55 0C mov edx,dword ptr ss:[ebp+C]
00BF5942 8B12 mov edx,dword ptr ds:[edx]
00BF5944 8902 mov dword ptr ds:[edx],eax
(3)
00BF5953 8B55 0C mov edx,dword ptr ss:[ebp+C]
00BF5956 8B12 mov edx,dword ptr ds:[edx]
00BF5958 8902 mov dword ptr ds:[edx],eax
(4)
00BF5961 8B55 0C mov edx,dword ptr ss:[ebp+C]
00BF5964 8B12 mov edx,dword ptr ds:[edx]
00BF5966 8902 mov dword ptr ds:[edx],eax
Shift+F9运行,运行之后按顺序断在(1)(3)(4)三处,
00BF58CF 8B55 0C mov edx,dword ptr ss:[ebp+C] ;断在这里,取消断点
00BF58D2 8B12 mov edx,dword ptr ds:[edx]
00BF58D4 8902 mov dword ptr ds:[edx],eax ;修改为mov dword ptr ds:[edx],ebx
寄存器ebx保存正确的函数,继续Shift+F9运行
00BF5953 8B55 0C mov edx,dword ptr ss:[ebp+C] ;断在这里,取消断点
00BF5956 8B12 mov edx,dword ptr ds:[edx]
00BF5958 8902 mov dword ptr ds:[edx],eax
Shift+F9继续运行
00BF595C B8 B846BF00 mov eax,0BF46B8 ;注意这里
00BF5961 8B55 0C mov edx,dword ptr ss:[ebp+C] ;断在这里,取消断点,F8走
00BF5964 8B12 mov edx,dword ptr ds:[edx]
00BF5966 8902 mov dword ptr ds:[edx],eax ;走到这里,此时EAX=0BF46B8
Ctrl+G到达0BF46B8看看
00BF46B8 55 push ebp
00BF46B9 8BEC mov ebp,esp
00BF46BB 8B55 0C mov edx,dword ptr ss:[ebp+C]
00BF46BE 8B45 08 mov eax,dword ptr ss:[ebp+8]
00BF46C1 3B05 F823C000 cmp eax,dword ptr ds:[C023F8]
00BF46C7 75 09 jnz short 00BF46D2
00BF46C9 8B0495 F823C000 mov eax,dword ptr ds:[edx*4+C023F8]
00BF46D0 EB 07 jmp short 00BF46D9
00BF46D2 52 push edx
00BF46D3 50 push eax
00BF46D4 E8 2710FFFF call 00BE5700 ; jmp to
kernel32.GetProcAddress
00BF46D9 5D pop ebp
00BF46DA C2 0800 retn 8
原来是GetProcAddress,Ctrl+G到达00BE5700
00BE5700 - FF25 7852C000 jmp dword ptr ds:[C05278] ; kernel32.GetProcAddress
在OD下方可以看到
ds:[00C05278]=77E5B332 (kernel32.GetProcAddress)
返回00BF5966,修改EAX的值为77E5B332
(二)Pre-Dip:用自己名字注册
到这里,我们要处理Pre-Dip完成注册,取消前面所有断点,重新设置OD,去掉OD的内存访问异常的钩选(即不
忽略内存访问异常)。
Shift+F9运行,注意堆栈中的变化,当第二次在堆栈中看到"W4kI2ABwYqk="硬盘指纹时,来到这里
00C00DE4 0172 00 add dword ptr ds:[edx],esi ;来到这里
00C00DE7 6F outs dx,dword ptr es:[edi]
00C00DE8 09D9 or ecx,ebx
00C00DEA 67:64:8F06 0000 pop dword ptr fs:[0]
00C00DF0 EB 01 jmp short 00C00DF3
00C00DF2 9A 83C404C1 D23>call far 31D2:C104C483
00C00DF9 BA 5A294100 mov edx,41295A
00C00DFE 5A pop edx
00C00DFF A1 9026C000 mov eax,dword ptr ds:[C02690]
00C00E04 C700 DD000000 mov dword ptr ds:[eax],0DD
00C00E0A 8B15 3C26C000 mov edx,dword ptr ds:[C0263C]
00C00E10 A1 8C26C000 mov eax,dword ptr ds:[C0268C]
堆栈处为
0012FF1C 0012FF2C 指针到下一个 SEH 记录
0012FF20 00C00CEF SE 句柄
0012FF24 40E2D32B
0012FF28 00C50564 ASCII "W4kI2ABwYqk="
0012FF2C 0012FF80 指针到下一个 SEH 记录
0012FF30 00C0114C SE 句柄
现在可以在内存查看处下断点了,Alt+M打开内存查看窗口,在00401000处下内存访问断点,Shift+F9运行来到
这里
004A3A00 8B4424 04 mov eax,dword ptr ss:[esp+4] ;停在这里F8网下走
004A3A04 8B0D 38245000 mov ecx,dword ptr ds:[502438]
004A3A0A 85C9 test ecx,ecx
004A3A0C A3 885B5100 mov dword ptr ds:[515B88],eax ;走到这里,eax保存注册名的地
方,我们要注册,就要在这里对eax动手脚了
004A3A11 8B4424 08 mov eax,dword ptr ss:[esp+8]
004A3A15 A3 8C5B5100 mov dword ptr ds:[515B8C],eax
004A3A1A 7D 05 jge short abslogde.004A3A21
004A3A1C A3 38245000 mov dword ptr ds:[502438],eax
004A3A21 C2 0800 retn 8
找一块空地写下名字,然后把004A3A0C处的EAX修改为你名字的地址就行了,我找了004D2FE4这里用laype注册
修改004A3A0C处的EAX=004D2FE4,处理完毕
查找OEP
刚才我们设置的内存访问断点继续保持有效,但重新设置OD,OD中的内存访问异常重新打上勾(忽略所有异常)
,Shift+F9运行多次,来到这里
00470B7D 6A 60 push 60 ;停在这里,这里就是OEP了
00470B7F 68 C8374D00 push abslogde.004D37C8
00470B84 E8 77020000 call abslogde.00470E00
00470B89 BF 94000000 mov edi,94
00470B8E 8BC7 mov eax,edi
00470B90 E8 9B6F0000 call abslogde.00477B30
00470B95 8965 E8 mov dword ptr ss:[ebp-18],esp
00470B98 8BF4 mov esi,esp
00470B9A 893E mov dword ptr ds:[esi],edi
00470B9C 56 push esi
00470B9D FF15 E0324D00 call dword ptr ds:[4D32E0] ; kernel32.GetVersionExA
00470BA3 8B4E 10 mov ecx,dword ptr ds:[esi+10]
不关闭OD,用LordPE完整脱壳保存为dumped,在用ImportREC抓取修复dumped
运行ImportREC,选择这个进程。
修改OEP=70B7D、自动搜索IAT,RAV=000D3000,大小=00000608,获取输入表显示全为真修复抓取dumped的
dumped_即为脱壳后的文件。
去除2个暗桩
试运行脱壳后的dumped_,这个软件有暗桩,我这里是用跟踪原程序来找暗桩
第一处:
004A3D5A /74 1B je short abslogde.004A3D77 ;这里是第一处
004A3D5C |6A 10 push 10
004A3D5E |68 70904E00 push abslogde.004E9070 ; ASCII "Absolute Log
Analyzer"
004A3D63 |68 88904E00 push abslogde.004E9088 ; ASCII "Failed to initialize
application"
004A3D68 |53 push ebx
004A3D69 |FF15 14344D00 call dword ptr ds:[4D3414] ; user32.MessageBoxA
原程序004A3D5A这里为跳,而脱壳后的不跳,修改脱壳后的je为jmp,试运行,还有一个暗桩
第二处:
004C8A1C /74 1E je short abslogde.004C8A3C ;这里为第二处
004C8A1E |6A 10 push 10
004C8A20 |68 18934D00 push abslogde.004D9318 ; ASCII "Absolute Log
Analyzer"
004C8A25 |68 30934D00 push abslogde.004D9330 ; ASCII "CRC check failed.
Application corrupted.
Execution impossible."
004C8A2A |6A 00 push 0
004C8A2C |FF15 14344D00 call dword ptr ds:[4D3414] ; user32.MessageBoxA
同样修改004C8A1C的je为jmp保存,脱壳成功。
呵呵,这篇参照了fly大侠的ASProtect V2.0 脱壳――Registry Clean Expert V3.52 UnPacked + 去除自检验,在此表示谢谢了。
--------------------------------------------------------------------------------
【版权声明】 本文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)