好友
阅读权限30
听众
最后登录1970-1-1
|
JoyChou.zip
(95.12 KB, 下载次数: 94)
脚本已经注明出处 by willJ
作者:————JoyChou
查壳是yoda's Protector 1.03.2
然后脚本我已经打包了,用脚本脱壳后会有个自校验,然后自己F12调用堆栈,nop掉那个“雅蠛蝶就ok了”
这里就由菜鸟我简单说下这个CM的不脱壳破解。
F12调用堆栈后,来到这,其实看到下面的提示就知道可以通过下断点可以关键的地方
在77D6657A C2 1000 retn 10 处下段,单步到程序领空
然后观察到字符串了,关键的地方也就找到了
004011AC . FFD6 call esi ; \获取用户名,长度返回给eax
004011AE . 6A 09 push 9 ; /Count = 9
004011B0 . 8D4424 0C lea eax,dword ptr ss:[esp+C] ; |
004011B4 . 50 push eax ; |Buffer
004011B5 . 68 EB030000 push 3EB ; |ControlID = 3EB (1003.)
004011BA . 57 push edi ; |hWnd
004011BB . FFD6 call esi ; \获取假码,长度依然给eax
004011BD . 8D7424 08 lea esi,dword ptr ss:[esp+8] ; 假码
004011C1 . 8D4C24 1C lea ecx,dword ptr ss:[esp+1C] ; 用户名
004011C5 . E8 36FEFFFF call Crackwho.00401000 //这里就是算法,进去看就知道了,算法了,很简单的,还是比较适合新手,这里我就把注册机贴出来吧。
004011CA . 5E pop esi
004011CB . 6A 00 push 0
004011CD . 68 3C9A4000 push Crackwho.00409A3C
004011D2 . 85C0 test eax,eax
004011D4 . 74 20 je short Crackwho.004011F6
004011D6 . 68 449A4000 push Crackwho.00409A44 ; UNICODE "Congratulation"
004011DB . 57 push edi
004011DC . FF15 FC804000 call dword ptr ds:[4080FC]
004011E2 . 33C0 xor eax,eax
004011E4 . 5F pop edi
004011E5 . 8B4C24 28 mov ecx,dword ptr ss:[esp+28]
004011E9 . 33CC xor ecx,esp
004011EB . E8 D1000000 call Crackwho.004012C1
004011F0 . 83C4 2C add esp,2C
004011F3 . C2 1000 retn 10
004011F6 > 68 649A4000 push Crackwho.00409A64 ; UNICODE "Sorry,You are wrong"
004011FB . 57 push edi
004011FC . FF15 FC804000 call dword ptr ds:[4080FC]
进入call到这发现算法,这只是第一重循环,我想下面的7次循环应该也没问题了
0040103E |. 0FB701 movzx eax,word ptr ds:[ecx] ; eax指向用户名
00401041 |. 0FB71424 movzx edx,word ptr ss:[esp] ; edx指向syclover
00401045 |. 33C2 xor eax,edx ; 第一位用户名和‘s’异或
00401047 |. 99 cdq
00401048 |. 57 push edi
00401049 |. BF 1A000000 mov edi,1A
0040104E |. F7FF idiv edi ; 异或的结果与1A的余数给edx
00401050 |. 0FB741 02 movzx eax,word ptr ds:[ecx+2] ; 此时将假码第二位给eax,准备进行下一次循环
00401054 |. 6A 09 push 9 ; /Arg3 = 00000009
00401056 |. 56 push esi ; |Arg2
00401057 |. 51 push ecx ; |Arg1
00401058 |. 83C2 41 add edx,41 ; |余数加41
0040105B |. 66:8911 mov word ptr ds:[ecx],dx ; |结果放回ecx
用户名:JoyChou
注册码:FWAVHZQK
PS:当看到出现一个字符串:syclover就可以猜测注册码是8位的。此题是明码比较的,菜鸟就装B的吧算法写了出来,忘老鸟勿喷。
算法:
用户名每一位和syclover十六进制异或,结果%1A,再+0x41,结果转字符
换成十进制就是,结果%26,再加上65
由于菜鸟只会C语言,所以只能写个苦逼的C程序,忘大牛见怪
#include <stdio.h>
int main(void)
{
char name[10];
int i, c;
char temp[10] = "syclover";
char key[10];
printf("input your name:");
gets(name);
for (i = 0; i < 8; i++)
{
key = ( (name ^ temp)%26 ) + 65;
}
key= '\0';
printf("the key is: ");
puts(key);
printf("\n");
c=getchar();
return 0;
}
|
免费评分
-
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|