首页
社区
课程
招聘
[旧帖] [原创][申请邀请码]对一个reverseMe的简单破解 0.00雪花
发表于: 2011-3-14 15:46 1265

[旧帖] [原创][申请邀请码]对一个reverseMe的简单破解 0.00雪花

2011-3-14 15:46
1265
【题目】reverseMe的简单破解
【作者】后恋
【工具】OD,vc
【软件】无壳,代码简洁
是个很简单的软件因为初学逆向,水平比较菜希望能申请一个邀请码。

  
运行后提示:



看来是要求制作一个文件。OD载入发现代码非常简单。直接往下拉就来到如下CreateFileA函数:

明显是要读入一个keyfile.dat文件,其中因为CreateFileA函数调用失败则返回-1,而且函数调用的返回值都是存放在EAX中,故若EAX等于-1则弹出对话框提示失败(就是刚开始直接点击出现的错误)。
首先我们制作一个命名为keyfile.dat的文件放在软件同目录下。继续看代码:
0040109A   > \6A 00         push    0                                ; /pOverlapped = NULL
0040109C   .  68 73214000   push    00402173                         ; |pBytesRead = reverseM.00402173
004010A1   .  6A 46         push    46                               ; |BytesToRead = 46 (70.)
004010A3   .  68 1A214000   push    0040211A                         ; |Buffer = reverseM.0040211A
004010A8   .  50            push    eax                              ; |hFile
004010A9   .  E8 2F020000   call    <jmp.&KERNEL32.ReadFile>         ; \ReadFile   读取文件放在缓冲区0X00402173H处
004010AE   .  85C0          test    eax, eax                        ;判断读取文件内容是否成功
004010B0   .  75 02         jnz     short 004010B4
004010B2   .  EB 43         jmp    short 004010F7
004010B4   >  33DB          xor     ebx, ebx                         ;  ebx清零
004010B6   .  33F6          xor     esi, esi                         ;  esi清零
004010B8   .  833D 73214000>cmp     dword ptr [402173], 10           ;  kefile文件字符数小于16则失败
004010BF   .  7C 36         jl      short 004010F7                   ;  跳转到失败

004010C1   >  8A83 1A214000 mov     al, byte ptr [ebx+40211A]        ;  取keyfile的字符
004010C7   .  3C 00         cmp     al, 0                            ;  字符串是否取完
004010C9   .  74 08         je      short 004010D3                   ;  取完全部字符,跳出循环
004010CB   .  3C 47         cmp     al, 47                           ;  是否为G
004010CD   .  75 01         jnz     short 004010D0
004010CF   .  46            inc     esi                                     ;  若该字符是G则ESI+1
004010D0   >  43            inc     ebx
004010D1   .^ EB EE         jmp     short 004010C1
004010D3   >  83FE 08       cmp     esi, 8                           ;  可以看出应该有至少8个G
004010D6   .  7C 1F         jl      short 004010F7                   ;  若esi<8前8个字符如果有空格则失败
004010D8   .  E9 28010000   jmp     00401205                   ;  完成则成功

以上是一个循环体,是kefile文件的关键。用c语言表示类似为
********************************************
char a[] = “111GGGGGGGGGGGG”;
int j=0,i=0;
for (i=0;a[i] !=’\0’;i++)
{
    if(a[i] == ‘G’)
           j++;        
}
if(j>=8)
printf(“success”);
else
printf(“failed”);

********************************

00401205   > \6A 00         push    0                                ; |/Style = MB_OK|MB_APPLMODAL
00401207   .  68 00204000   push    00402000                         ; ||Title = " Key File ReverseMe"
0040120C   .  68 DE204000   push    004020DE                         ; ||Text = "You really did it! Congratz !!!"
00401211   .  6A 00         push    0                                ; ||hOwner = NULL
00401213   .  E8 4F010000   call    <jmp.&USER32.MessageBoxA>        ; |\MessageBoxA
00401218   .  E8 9C000000   call    <jmp.&KERNEL32.ExitProcess>      ; \ExitProcess

如此我们便可以自己写出一个keyfile.dat条件如下:
1、不小于16个字符;
2、有至少8个G;
故制作自己的keyfile.dat如下:
1111111GGGGGG11GG
再次运行软件成功:


菜鸟水平,在论坛里混了老久了,依然是初级新人。惭愧啊。千万别笑话我,我真的很认真的在学习了。

[课程]Linux pwn 探索篇!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 35
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
很好的帖子,例子简单但思路清晰,简洁易懂,适合新人学习,谢谢楼主
2013-1-11 10:05
0
游客
登录 | 注册 方可回帖
返回
//