首页
社区
课程
招聘
[原创]再来一个简单的KEYGEN ME
发表于: 2010-3-13 21:10 10819

[原创]再来一个简单的KEYGEN ME

2010-3-13 21:10
10819
收藏
免费 0
支持
分享
最新回复 (30)
雪    币: 119
活跃值: (10)
能力值: ( LV9,RANK:160 )
在线值:
发帖
回帖
粉丝
26
谢谢s大,先爆一个吧!(已经花了不少时间了,没精力看算法了)
不会的看此贴:http://bbs.pediy.com/showthread.php?t=85840 s大回复了如何调试

另开始想添加这句爆破,但是没成功:mov     byte ptr [3826CB], 78

Num1、开始想在入口点添加,结果发现入口的时候还没有放入关键的代码,
Num2、然后考虑在调用WriteProcessMemory之前添加,结果提示内存不可以写。(考虑到可能是更改了内存属性,只查到VirtualProtectEx可能对内存的属性有所更改。所以更改了他的入参,可是依然没搞定。)
Num3、没办法了,他可以改,我不可以,那只好找到他在哪里改的了。在3826CB上下内存写入断点,断在下面这句,此时esi中的值为:004013D0,G去一看,关键代码在此,改了保存,OK。
上传的附件:
2010-3-15 23:40
0
雪    币: 1074
活跃值: (160)
能力值: ( LV13,RANK:760 )
在线值:
发帖
回帖
粉丝
27
没这么复杂吧?呵呵,只是一个9位数,要满足9个数字不相同且不含0,然后从前1位到前9位依次能被1-9的9个数字整除即可。用穷取法求解即可。
2010-3-16 08:24
0
雪    币: 119
活跃值: (10)
能力值: ( LV9,RANK:160 )
在线值:
发帖
回帖
粉丝
28
没读过几段代码呢,开始没意识到算法简单啊!想先爆了再说吧,结果就绕咋里面了。汗,估计用那么长时间,看算法也出来了。。
写那段只是想问下,问什么“内存不可以写”是哪个的问题,该如何改呢?
2010-3-16 08:37
0
雪    币: 1074
活跃值: (160)
能力值: ( LV13,RANK:760 )
在线值:
发帖
回帖
粉丝
29
注意到你修改的代码不是在本地运行的,用硬编码的形式由于系统每次运行分配的内存地址有可能并不相同,会造成你所说的问题 整个计算其实都是在远程进程中进行的,而本地只是根据远程返回的消息进行“应答”

自已爆破下:前面的三位数字限制懒得去了,如此修改后可以输入3-49位之间任意数字即可成功。

0040140C  |.  8B55 EC       mov     edx, dword ptr [ebp-14]
0040140F  |.  8B02          mov     eax, dword ptr [edx]
00401411      E9 25010000   jmp     0040153B           ;  不计算了,直接成功……
00401416  |.  8B4D EC       mov     ecx, dword ptr [ebp-14]
00401419  |.  FF51 0C       call    dword ptr [ecx+C]
2010-3-16 10:25
0
雪    币: 119
活跃值: (10)
能力值: ( LV9,RANK:160 )
在线值:
发帖
回帖
粉丝
30
多谢啦!改成相对取址就OK了
mov     byte ptr [edi + xx], xx

代码最后刚好有足够的空间放修改的代码,哈哈!

(虽然没按LZ的意思Keygen一下。。还是学的了不少,抽空读读代码。。)

补上代码的注释吧:

004013D0  /.  55            push    ebp
004013D1  |.  8BEC          mov     ebp, esp
004013D3  |.  83EC 18       sub     esp, 18
004013D6  |.  53            push    ebx
004013D7  |.  56            push    esi
004013D8  |.  57            push    edi
004013D9  |.  C745 FC 00000>mov     dword ptr [ebp-4], 0
004013E0  |.  C745 F8 00000>mov     dword ptr [ebp-8], 0
004013E7  |.  C745 F4 00000>mov     dword ptr [ebp-C], 0
004013EE  |.  C745 F0 00000>mov     dword ptr [ebp-10], 0
004013F5  |.  C745 E8 00000>mov     dword ptr [ebp-18], 0
004013FC  |.  8B45 08       mov     eax, dword ptr [ebp+8]
004013FF  |.  8945 EC       mov     dword ptr [ebp-14], eax
00401402  |.  8B4D EC       mov     ecx, dword ptr [ebp-14]
00401405  |.  C741 04 00000>mov     dword ptr [ecx+4], 0
0040140C  |.  8B55 EC       mov     edx, dword ptr [ebp-14]
0040140F  |.  8B02          mov     eax, dword ptr [edx]
00401411  |.  50            push    eax
00401412  |.  6A 00         push    0
00401414  |.  6A 04         push    4
00401416  |.  8B4D EC       mov     ecx, dword ptr [ebp-14]
00401419  |.  FF51 0C       call    dword ptr [ecx+C]
0040141C  |.  8945 FC       mov     dword ptr [ebp-4], eax
0040141F  |.  6A 32         push    32
00401421  |.  6A 00         push    0
00401423  |.  6A 00         push    0
00401425  |.  6A 04         push    4
00401427  |.  8B55 FC       mov     edx, dword ptr [ebp-4]
0040142A  |.  52            push    edx                              ;  记不清是哪位大牛说的了
0040142B  |.  8B45 EC       mov     eax, dword ptr [ebp-14]          ;  看代码要先弄清楚并记住关键的变量
0040142E  |.  FF50 10       call    dword ptr [eax+10]               ;  ebp-10  字符串长度strlen
00401431  |.  8945 E8       mov     dword ptr [ebp-18], eax          ;  ebp-18  字符串首地址str
00401434  |.  8B4D E8       mov     ecx, dword ptr [ebp-18]          ;  ebp-8   循环变量i
00401437  |.  51            push    ecx                              ;  ebp-C   循环变量j
00401438  |.  8B55 EC       mov     edx, dword ptr [ebp-14]
0040143B  |.  FF52 20       call    dword ptr [edx+20]
0040143E  |.  8945 F0       mov     dword ptr [ebp-10], eax
00401441  |.  837D F0 09    cmp     dword ptr [ebp-10], 9
00401445  |.  74 1D         je      short 00401464                   ;  注册码长度是9才继续
00401447  |.  6A 00         push    0                                ;  ——
00401449  |.  6A 00         push    0                                ;      |
0040144B  |.  68 82040000   push    482                              ;      |
00401450  |.  8B45 EC       mov     eax, dword ptr [ebp-14]          ;      |
00401453  |.  8B48 08       mov     ecx, dword ptr [eax+8]           ;      |——这段是退出函数之前的一些处理了
00401456  |.  51            push    ecx                              ;      |   (应该是从Explorer给CM发个消息)
00401457  |.  8B55 EC       mov     edx, dword ptr [ebp-14]          ;      |
0040145A  |.  FF52 18       call    dword ptr [edx+18]               ;      |
0040145D  |.  33C0          xor     eax, eax                         ;      |
0040145F  |.  E9 0A010000   jmp     0040156E                         ;  ——

for(i = 0; i < strlen-1; i++)
  for(j = i +1; j < strlen; j++)
  {
    if(str[i] == str[i])
        { //失败,准备退出}
  }
00401464  |>  C745 F8 00000>mov     dword ptr [ebp-8], 0             ;  i = 0 (下面开始是个双重循环)
0040146B  |.  EB 09         jmp     short 00401476
0040146D  |>  8B45 F8       /mov     eax, dword ptr [ebp-8]          ;  ——
00401470  |.  83C0 01       |add     eax, 1                          ;      |—— i++
00401473  |.  8945 F8       |mov     dword ptr [ebp-8], eax          ;  ——
00401476  |>  8B4D F0        mov     ecx, dword ptr [ebp-10]         ;  ——\
00401479  |.  83E9 01       |sub     ecx, 1                          ;  ——|—— strlen-1
0040147C  |.  394D F8       |cmp     dword ptr [ebp-8], ecx
0040147F  |.  0F83 85000000 |jnb     0040150A                        ;  上面这一小段 (i=0;i<strlen-1;i++),这句跳了就退出循环
00401485  |.  8B55 E8       |mov     edx, dword ptr [ebp-18]
00401488  |.  0355 F8       |add     edx, dword ptr [ebp-8]          ;  取第i个字符 (str+i)
0040148B  |.  33C0          |xor     eax, eax
0040148D  |.  8A02          |mov     al, byte ptr [edx]
0040148F  |.  83E8 30       |sub     eax, 30                         ;  字符ASSIC码转数字
00401492  |.  85C0          |test    eax, eax
00401494  |.  75 1D         |jnz     short 004014B3                  ;  不为零则继续
00401496  |.  6A 00         |push    0                               ;  ——
00401498  |.  6A 00         |push    0                               ;    |
0040149A  |.  68 82040000   |push    482
0040149F  |.  8B4D EC       |mov     ecx, dword ptr [ebp-14]
004014A2  |.  8B51 08       |mov     edx, dword ptr [ecx+8]          ;  注册码有误,准备退出了
004014A5  |.  52            |push    edx
004014A6  |.  8B45 EC       |mov     eax, dword ptr [ebp-14]
004014A9  |.  FF50 18       |call    dword ptr [eax+18]
004014AC  |.  33C0          |xor     eax, eax                        ;    |
004014AE  |.  E9 BB000000   |jmp     0040156E                        ;  ——
004014B3  |>  8B4D F8       |mov     ecx, dword ptr [ebp-8]          ;  ——\
004014B6  |.  83C1 01       |add     ecx, 1                          ;      |
004014B9  |.  894D F4       |mov     dword ptr [ebp-C], ecx          ;  ——|—— j = i + 1
004014BC  |.  EB 09         |jmp     short 004014C7
004014BE  |>  8B55 F4       |/mov     edx, dword ptr [ebp-C]         ;  ——
004014C1  |.  83C2 01       ||add     edx, 1                         ;      | —— j++
004014C4  |.  8955 F4       ||mov     dword ptr [ebp-C], edx         ;  ——
004014C7  |>  8B45 F4       | mov     eax, dword ptr [ebp-C]
004014CA  |.  3B45 F0       ||cmp     eax, dword ptr [ebp-10]
004014CD  |.  73 36         ||jnb     short 00401505                 ;  j < strlen 则继续循环 (jnb不低于则跳转,j>=strlen则跳)
004014CF  |.  8B4D E8       ||mov     ecx, dword ptr [ebp-18]
004014D2  |.  034D F8       ||add     ecx, dword ptr [ebp-8]         ;  ecx = str + i
004014D5  |.  33D2          ||xor     edx, edx
004014D7  |.  8A11          ||mov     dl, byte ptr [ecx]             ;  edx = str[i]
004014D9  |.  8B45 E8       ||mov     eax, dword ptr [ebp-18]
004014DC  |.  0345 F4       ||add     eax, dword ptr [ebp-C]         ;  eax = str + j
004014DF  |.  33C9          ||xor     ecx, ecx
004014E1  |.  8A08          ||mov     cl, byte ptr [eax]             ;  ecx = str[j]
004014E3  |.  33D1          ||xor     edx, ecx
004014E5  |.  85D2          ||test    edx, edx
004014E7  |.  75 1A         ||jnz     short 00401503                 ;  str[i] != str[j] 则继续循环
004014E9  |.  6A 00         ||push    0                              ;  ——
004014EB  |.  6A 00         ||push    0                              ;   |
004014ED  |.  68 82040000   ||push    482
004014F2  |.  8B55 EC       ||mov     edx, dword ptr [ebp-14]
004014F5  |.  8B42 08       ||mov     eax, dword ptr [edx+8]         ;  准备退出
004014F8  |.  50            ||push    eax
004014F9  |.  8B4D EC       ||mov     ecx, dword ptr [ebp-14]
004014FC  |.  FF51 18       ||call    dword ptr [ecx+18]
004014FF  |.  33C0          ||xor     eax, eax                       ;   |
00401501  |.  EB 6B         ||jmp     short 0040156E                 ;  ——
00401503  |>^ EB B9         |\jmp     short 004014BE                 ;  内层循环
00401505  |>^ E9 63FFFFFF   \jmp     0040146D

0040150A  |>  60            pushad                                   ;  下面开始另一个合法性判断
0040150B  |.  33FF          xor     edi, edi
0040150D  |.  33F6          xor     esi, esi
0040150F  |.  8B4D F0       mov     ecx, dword ptr [ebp-10]
00401512  |.  8B6D E8       mov     ebp, dword ptr [ebp-18]
00401515  |>  0FB65D 00     movzx   ebx, byte ptr [ebp]
00401519  |.  8D5B D0       lea     ebx, dword ptr [ebx-30]          ;  Assic码转数字
0040151C  |.  03FB          add     edi, ebx                         ;  把当前取得字符以及之前字符组成的字符串转换为数字,作为被除数
0040151E  |.  85F6          test    esi, esi
00401520  |.  75 0A         jnz     short 0040152C                   ;  第一位不跳,直接*10
00401522  |>  6BFF 0A       imul    edi, edi, 0A                     ;  满足条件则 *10, 准备加个位的数
00401525  |.  46            inc     esi
00401526  |.  45            inc     ebp
00401527  |.^ E2 EC         loopd   short 00401515
00401529  |.  61            popad
0040152A  |.  EB 0F         jmp     short 0040153B
0040152C  |>  33D2          xor     edx, edx
0040152E  |.  8BC7          mov     eax, edi
00401530  |.  8D5E 01       lea     ebx, dword ptr [esi+1]           ;  被除数是当前取得的字符的位置(下标+1)
00401533  |.  F7FB          idiv    ebx
00401535  |.  85D2          test    edx, edx                         ;  检查余数,不为零则跳到失败
00401537  |.  75 1C         jnz     short 00401555
00401539  |.^ EB E7         jmp     short 00401522
0040153B  |>  6A 00         push    0
0040153D  |.  6A 00         push    0
0040153F  |.  68 78040000   push    478
00401544  |.  8B55 EC       mov     edx, dword ptr [ebp-14]
00401547  |.  8B42 08       mov     eax, dword ptr [edx+8]
0040154A  |.  50            push    eax
0040154B  |.  8B4D EC       mov     ecx, dword ptr [ebp-14]
0040154E  |.  FF51 18       call    dword ptr [ecx+18]
00401551  |.  33C0          xor     eax, eax
00401553  |.  EB 19         jmp     short 0040156E
00401555  |>  61            popad
00401556  |.  6A 00         push    0
00401558  |.  6A 00         push    0
0040155A      68 82040000   push    482
0040155F  |.  8B55 EC       mov     edx, dword ptr [ebp-14]
00401562  |.  8B42 08       mov     eax, dword ptr [edx+8]
00401565  |.  50            push    eax
00401566  |.  8B4D EC       mov     ecx, dword ptr [ebp-14]
00401569  |.  FF51 18       call    dword ptr [ecx+18]
0040156C  |.  33C0          xor     eax, eax
0040156E  |>  5F            pop     edi
0040156F  |.  5E            pop     esi
00401570  |.  5B            pop     ebx
00401571  |.  8BE5          mov     esp, ebp
00401573  |.  5D            pop     ebp
00401574  \.  C2 0400       retn    4
2010-3-16 17:37
0
雪    币: 89
活跃值: (36)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
31
来了就留下拖鞋在走把
2010-3-19 16:47
0
游客
登录 | 注册 方可回帖
返回
//