[新手教程]鼠标连点器v2.0 脱壳(ASProtect v1.23 RC1) + 注册机
本帖最后由 Peace 于 2013-5-29 08:09 编辑【文章标题】:[新手教程]鼠标连点器v2.0 脱壳(ASProtect v1.23 RC1) + 注册机
【文章作者】: Chief
【作者邮箱】: Hi_Chief@163.com
【作者主页】: http://hi.baidu.com/Hi_Chief
【下载地址】: 见附件
【保护方式】: ASProtect v1.23 RC1保护壳+注册码
【使用工具】: PEiD,OllyDbg,ImportREC
【作者声明】: 脱壳方法大部分收集于网络,总结自己的小方法,哪里不对还望各位指点!
--------------------------------------------------------------------------------
【详细过程】
首先查壳:ASProtect v1.23 RC1
入口:
00401000 >68 01005400 push 鼠键连点.00540001
00401005 E8 01000000 call 鼠键连点.0040100B
0040100A C3 retn
0040100B C3 retn
0040100C 70 0F jo short 鼠键连点.0040101D
0040100E 1170 BD adc dword ptr ds:[eax-43],esi
00401011 A1 29315024 mov eax,dword ptr ds:
00401016 5F pop edi
00401017 2B8F 00C2D8DE sub ecx,dword ptr ds:[edi+DED8C200]
0040101D 9B wait
0040101E 8F ??? ; 未知命令
0040101F 24 15 and al,15
00401021 49 dec ecx
00401022 FA cli
00401023 C006 6A rol byte ptr ds:[esi],6A
00401026 51 push ecx
00401027 95 xchg eax,ebp
先设置OD
打开OD--选项--调试设置---异常
去掉 INT3 中断 非法访问内存前面的勾 如图:
设置StrongOD如图:
(这里要说下,OD设置不同,所以有的会跑飞,预防新同学不会设置,我会把设置好的OD给大家打包(OD来自网络),提供给大家练习)
一切设置完毕后,F9运行
运行后会停在如下位置
00000: 00E6FF66 0000 add byte ptr ds:[eax],al
00001: 00E6FF68 E8 33C05A59 call 5A41BFA0
00002: 00E6FF6D 59 pop ecx
00003: 00E6FF6E 64:8910 mov dword ptr fs:[eax],edx
00004: 00E6FF71 EB 0F jmp short 00E6FF82
00005: 00E6FF73^ E9 F02EFCFF jmp 00E32E68
00006: 00E6FF78 E8 67FBFFFF call 00E6FAE4
00007: 00E6FF7D E8 4232FCFF call 00E331C4
00008: 00E6FF82 E8 05E9FFFF call 00E6E88C
00009: 00E6FF87 33C0 xor eax,eax
00010: 00E6FF89 5A pop edx
00011: 00E6FF8A 59 pop ecx
00012: 00E6FF8B 59 pop ecx
00013: 00E6FF8C 64:8910 mov dword ptr fs:[eax],edx
00014: 00E6FF8F 68 A4FFE600 push 0E6FFA4
00015: 00E6FF94 8D45 F4 lea eax,dword ptr ss:[ebp-C]
00016: 00E6FF97 E8 5C37FCFF call 00E336F8
////////////////////////////////////////////////////////////
注意左下角的提示:如图:
////////////////////////////////////////////////////////////
此时我们Shift+F9 继续运行
来到
00000: 00E6E2BB 90 nop
00001: 00E6E2BC EB 01 jmp short 00E6E2BF
00002: 00E6E2BE 6966 81 FE47467>imul esp,dword ptr ds:[esi-7F],744647FE
00003: 00E6E2C5 05 31C040EB add eax,EB40C031
00004: 00E6E2CA 0231 add dh,byte ptr ds:[ecx]
00005: 00E6E2CC C031 DB sal byte ptr ds:[ecx],0DB
00006: 00E6E2CF 64:8F03 pop dword ptr fs:[ebx]
00007: 00E6E2D2 83C4 04 add esp,4
00008: 00E6E2D5 EB 01 jmp short 00E6E2D8
00009: 00E6E2D7 E8 5F5E5BC3 call C442413B
////////////////////////////////////////////////////////////
继续F9运行
停到如下位置
00000: 00E6F004 0000 add byte ptr ds:[eax],al
00001: 00E6F006 E8 33C05A59 call 5A41B03E
00002: 00E6F00B 59 pop ecx
00003: 00E6F00C 64:8910 mov dword ptr fs:[eax],edx
00004: 00E6F00F EB 0F jmp short 00E6F020
00005: 00E6F011^ E9 523EFCFF jmp 00E32E68
00006: 00E6F016 E8 A5FEFFFF call 00E6EEC0
00007: 00E6F01B E8 A441FCFF call 00E331C4
00008: 00E6F020 A1 9C2BE700 mov eax,dword ptr ds:
00009: 00E6F025 C600 CF mov byte ptr ds:[eax],0CF
00010: 00E6F028 EB 7E jmp short 00E6F0A8
00011: 00E6F02A E8 1D35FCFF call 00E3254C
////////////////////////////////////////////////////////////
此时我们会发现左下角又提示异常
继续 Shift+F9 运行
来到
00000: 00E6F382 0000 add byte ptr ds:[eax],al
00001: 00E6F384 E8 33C05A59 call 5A41B3BC
00002: 00E6F389 59 pop ecx
00003: 00E6F38A 64:8910 mov dword ptr fs:[eax],edx
00004: 00E6F38D EB 2F jmp short 00E6F3BE
00005: 00E6F38F^ E9 D43AFCFF jmp 00E32E68
00006: 00E6F394 8B45 F8 mov eax,dword ptr ss:[ebp-8]
00007: 00E6F397 50 push eax
00008: 00E6F398 8B45 FC mov eax,dword ptr ss:[ebp-4]
00009: 00E6F39B 50 push eax
00010: 00E6F39C A1 242BE700 mov eax,dword ptr ds:
00011: 00E6F3A1 8B00 mov eax,dword ptr ds:[eax]
00012: 00E6F3A3 E8 B45DFFFF call 00E6515C
还是一样左下角提示异常,继续Shift+F9 运行
来到
00000: 00E6E2BB 90 nop
00001: 00E6E2BC EB 01 jmp short 00E6E2BF
00002: 00E6E2BE 6966 81 FE47467>imul esp,dword ptr ds:[esi-7F],744647FE
00003: 00E6E2C5 05 31C040EB add eax,EB40C031
00004: 00E6E2CA 0231 add dh,byte ptr ds:[ecx]
00005: 00E6E2CC C031 DB sal byte ptr ds:[ecx],0DB
00006: 00E6E2CF 64:8F03 pop dword ptr fs:[ebx]
00007: 00E6E2D2 83C4 04 add esp,4
00008: 00E6E2D5 EB 01 jmp short 00E6E2D8
00009: 00E6E2D7 E8 5F5E5BC3 call C442413B
////////////////////////////////////////////////////////////
此时发现又回到 00E6E2BB这里了,此时若再次运行程序就跑飞了,
我们往下找到retn处,也就是段尾
00000: 00E6E32F /EB 01 jmp short 00E6E332
00001: 00E6E331 |0F31 rdtsc
00002: 00E6E333 C040 5F 5E rol byte ptr ds:[eax+5F],5E
00003: 00E6E337 EB 01 jmp short 00E6E33A
00004: 00E6E339 C7 ??? ; 未知命令
00005: 00E6E33A 5B pop ebx
00006: 00E6E33B 5A pop edx
00007: 00E6E33C 59 pop ecx
00008: 00E6E33D C3 retn
////////////////////////////////////////////////////////////
00E6E33D 处 F2下断 F9继续运行
////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////
如图已经被断下,此时取消断点
ALT+M打开内存映射
找到代码段,如图
////////////////////////////////////////////////////////////
00401000处F2下断
Shift+F9 运行
来到
00000: 0053F17B 8128 51CB68A5 sub dword ptr ds:[eax],A568CB51
00001: 0053F181 EB 24 jmp short 鼠键连点.0053F1A7
00002: 0053F183^ E3 E9 jecxz short 鼠键连点.0053F16E
00003: 0053F185 34 EA xor al,0EA
00004: 0053F187 F8 clc
00005: 0053F188 6F outs dx,dword ptr es:[edi]
00006: 0053F189 96 xchg eax,esi
00007: 0053F18A 2D 33F0BDF5 sub eax,F5BDF033
00008: 0053F18F 60 pushad
00009: 0053F190 16 push ss
00010: 0053F191 814CB4 58 498D6>or dword ptr ss:[esp+esi*4+58],13688D49
00011: 0053F199 CE into
00012: 0053F19A 1BA7 DC2252AA sbb esp,dword ptr ds:[edi+AA5222DC]
00013: 0053F1A0 15 F0BE22BE adc eax,BE22BEF0
00014: 0053F1A5 05 8B83C004 add eax,4C0838B
00015: 0053F1AA EB 0C jmp short 鼠键连点.0053F1B8
F8往下走几次来到如图
00000: 0053F1D1 95 xchg eax,ebp
00001: 0053F1D2 52 push edx
00002: 0053F1D3 94 xchg eax,esp
00003: 0053F1D4 CF iretd
00004: 0053F1D5^ 0F85 79FFFFFF jnz 鼠键连点.0053F154
00005: 0053F1DB EB 08 jmp short 鼠键连点.0053F1E5 ; F4 运行到所选位置
00006: 0053F1DD C7 ??? ; 未知命令
往上跳,我们选中0053F1DB -------F4 运行到所选位置
F8继续往下走来到如图,又是往上跳,继续选中下面一行代码F4
00000: 0053F207 832F 01 sub dword ptr ds:[edi],1
00001: 0053F20A F9 stc
00002: 0053F20B 72 01 jb short 鼠键连点.0053F20E
00003: 0053F20D F1 int1
00004: 0053F20E^ 0F85 CEFEFFFF jnz 鼠键连点.0053F0E2
00005: 0053F214 EB 16 jmp short 鼠键连点.0053F22C ;F4 运行到所选位置
00006: 0053F216 1153 41 adc dword ptr ds:[ebx+41],edx
一路F8,就到OEP了OEP:0045E585
00000: 0045E585 55 push ebp ; 来到 OEP了
00001: 0045E586 8BEC mov ebp,esp
00002: 0045E588 6A FF push -1
00003: 0045E58A 68 E8E24C00 push 鼠键连点.004CE2E8
00004: 0045E58F 68 C40F4600 push 鼠键连点.00460FC4
00005: 0045E594 64:A1 00000000mov eax,dword ptr fs:
00006: 0045E59A 50 push eax
00007: 0045E59B 64:8925 0000000>mov dword ptr fs:,esp
00008: 0045E5A2 83EC 58 sub esp,58
00009: 0045E5A5 53 push ebx
00010: 0045E5A6 56 push esi
00011: 0045E5A7 57 push edi
00012: 0045E5A8 8965 E8 mov dword ptr ss:[ebp-18],esp
00013: 0045E5AB FF15 94014800 call dword ptr ds: ; kernel32.GetVersion
此时用OllyDump脱壳保存
小总结一下步骤
F9 运行来到 00E6FF66
Shift+F9 运行来到 00E6E2BB
F9 运行来到00E6F004
Shift+F9 运行来到 00E6F382
Shift+F9 运行来到 00E6E2BB
RETN处00E6E33DF2断点
F9运行----取消断点----Alt+M----代码段00401000(F2断点)---Shift+F9运行
一路F8往下走,遇到往上跳的,选中下面一行代码F4。
接下来就是修复了,打开ImportREC
选取我们的进程
填入OEP:5E585
自动查找IAT,获取输入表修复转储文件
/////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////接下来就是破解部分了//////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////
载入脱壳修复后的程序 F9运行
Ctrl+B 输入 FF55FC5F5E(易语言按钮事件)来到 004258CD -----F2 下断
随意输入我们的假码
CPU系列号:S178BFBFF00060FB2J
用户名称:Chief
注册码:52pojie
点击注册此时会断在004258CD 按钮事件这里
F7进入来到
00000: 00404034/.55 push ebp ;(Initial CPU selection)
00001: 00404035|.8BEC mov ebp,esp
00002: 00404037|.81EC 0C000000 sub esp,0C
00003: 0040403D|.E8 66010000 call Dump_.004041A8
00004: 00404042|.8945 FC mov ,eax
00005: 00404045|.6A FF push -1
00006: 00404047|.6A 08 push 8
00007: 00404049|.68 29180116 push 16011829
00008: 0040404E|.68 1E180152 push 5201181E
00009: 00404053|.E8 4F1A0000 call Dump_.00405AA7
F8往下
0040403D F7进入
来到
00000: 004041A8/$55 push ebp
00001: 004041A9|.8BEC mov ebp,esp
00002: 004041AB|.81EC 0C000000 sub esp,0C
00003: 004041B1|.68 04000080 push 80000004
00004: 004041B6|.6A 00 push 0
00005: 004041B8|.68 42304800 push Dump_.00483042 ;ASCII "STR_UINTIP=1;STR_QLOGIN_VERSION_ERR=2;STR_NO_UIN=3;STR_NO_PWD=4;STR_NO_VCODE=5;STR_INV_UIN=6;STR_INV_VCODE=7;STR_UIN=8;STR_PWD=9;STR_VCODE=10;STR_VCODE_TIP=11;STR_CHANGE_VCODE=12;STR_REMEMBER_PWD=13;STR_1_DAY=14;STR_1_WEEK=15;STR_1_MONTH"...
00006: 004041BD|.68 01000300 push 30001
00007: 004041C2|.68 20180116 push 16011820
00008: 004041C7|.68 1E180152 push 5201181E
00009: 004041CC|.68 02000000 push 2
00010: 004041D1|.B8 02000000 mov eax,2
00011: 004041D6|.BB E0464500 mov ebx,Dump_.004546E0
F8来到004041F6后我们发现寄存器里出现CPU系列号:S178BFBFF00060FB2J
继续往下走
来到0040423F寄存器出现一串码 :9A2AF2BF18B8E84A8C0008E093C69A1D(会不会是注册码?试试。)
复制9A2AF2BF18B8E84A8C0008E093C69A1D 注册看看
注册码保存位置:
"sj"="9A2AF2BF18B8E84A8C0008E093C69A1D"
提示成功了,那说明这串字符就是我们的真码了。
那他是怎么算出这串码的?
不难发现
系列号是直接获取了我们CPU系列号再加上他固定的字符,S+CPU系列号+J既:S178BFBFF00060FB2J(我本机)
(CPU序列号查看可以打开cmd输入:wmic CPU get ProcessorID 回车 即可看到)
注册码是将 系列号用MD5加密再转换成大写 = 注册码
易语言代码如下:源码我会打包
.版本 2
.支持库 dp1
.程序集 窗口程序集1
.子程序 _按钮1_被单击
编辑框2.加入文本 (到大写 (取数据摘要 (到字节集 (编辑框1.内容))))
Ps:至此就讲完了,觉得对你有帮助的就加分吧。
--------------------------------------------------------------------------------
【版权声明】: 本文原创于“吾爱破解论坛”Chief, 转载请注明作者并保持文章的完整, 谢谢!
2013年05月27日
----------------------Peace:沙发也精彩喔------------------------------
学习了 多谢 好贴 我喜欢多谢分享 希望以后大家 多多分享经验 共同进步
不错,支持了
赞 赞 赞 本帖最后由 Peace 于 2013-5-28 09:54 编辑
占个位置,等待解答问题。
-----借楼编辑--------------------------------------
校长居然没用吾爱专用注册机。。。
附吾爱版注册机及源码截图
非常详细 感谢 Chief大牛分享精彩教程 这个暂时看不懂 慢慢来吧 下载学习一下! 图还是没有视频好,只能膜拜了 之前看到了150权限 = =! 看到眼花,有视频就好了 写的教程对新手来说有点难懂。不懂之处有:
注册码那里描述再详细一些会更容易理解 谢谢C讲解!我下载了,但是不知道那个E语言怎么弄