首页
社区
课程
招聘
[原创]Source Insight 3.5逆向分析
发表于: 2010-10-9 17:05 8017

[原创]Source Insight 3.5逆向分析

2010-10-9 17:05
8017

【文章标题】: Source Insight 3.5的逆向分析
【下载地址】: 自己搜索下载
【使用工具】: vc2008
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教,但写c的程序员用这个的还是很多

-------------------------
离windows开发越来越远了。。。 不过标准c的开发也还好。只是看起来没那么华丽

入口容易断:
004432D9  /$  55            push    ebp
004432DA  |.  8BEC          mov     ebp, esp
004432DC  |.  83EC 20       sub     esp, 20
004432DF  |.  57            push    edi
004432E0  |.  6A 2D         push    2D
004432E2  |.  FF75 08       push    dword ptr [ebp+8]
004432E5  |.  E8 26870D00   call    0051BA10                         ;  spilte -
004432EA  |.  59            pop     ecx
004432EB  |.  59            pop     ecx
004432EC  |.  8945 F8       mov     dword ptr [ebp-8], eax
004432EF  |.  837D F8 00    cmp     dword ptr [ebp-8], 0
004432F3  |.  75 07         jnz     short 004432FC
004432F5  |.  33C0          xor     eax, eax
004432F7  |.  E9 3C010000   jmp     00443438
004432FC  |>  8B55 F8       mov     edx, dword ptr [ebp-8]
004432FF  |.  2B55 08       sub     edx, dword ptr [ebp+8]
00443302  |.  BF A8495A00   mov     edi, 005A49A8                    ;  ASCII "SI3US"
00443307  |.  83C9 FF       or      ecx, FFFFFFFF
。。。。。。。。。。。。。。。
00443420  |.  E8 CD850D00   call    0051B9F2                         ;  
00443425  |.  59            pop     ecx
00443426  |.  3945 FC       cmp     dword ptr [ebp-4], eax
00443429  |.  74 04         je      short 0044342F
0044342B  |.  33C0          xor     eax, eax
0044342D  |.  EB 09         jmp     short 00443438
0044342F  |>  8B45 E4       mov     eax, dword ptr [ebp-1C]
00443432  |.  C600 2D       mov     byte ptr [eax], 2D
00443435  |.  6A 01         push    1
00443437  |.  58            pop     eax
00443438  |>  5F            pop     edi
00443439  |.  C9            leave
0044343A  \.  C2 0400       retn    4

这里就是注册的流程。。。
注册码是xxxxx-xxxxxx-xxxxx形式给出的

注册分3部分 第一部分 是固定的 都是SI3US
004432D9  /$  55            push    ebp
004432DA  |.  8BEC          mov     ebp, esp
004432DC  |.  83EC 20       sub     esp, 20
004432DF  |.  57            push    edi
004432E0  |.  6A 2D         push    2D
004432E2  |.  FF75 08       push    dword ptr [ebp+8]
004432E5  |.  E8 26870D00   call    0051BA10                         ;  spilte -
004432EA  |.  59            pop     ecx
004432EB  |.  59            pop     ecx
004432EC  |.  8945 F8       mov     dword ptr [ebp-8], eax
004432EF  |.  837D F8 00    cmp     dword ptr [ebp-8], 0
004432F3  |.  75 07         jnz     short 004432FC
004432F5  |.  33C0          xor     eax, eax
004432F7  |.  E9 3C010000   jmp     00443438
004432FC  |>  8B55 F8       mov     edx, dword ptr [ebp-8]
004432FF  |.  2B55 08       sub     edx, dword ptr [ebp+8]
00443302  |.  BF A8495A00   mov     edi, 005A49A8                    ;  ASCII "SI3US"
00443307  |.  83C9 FF       or      ecx, FFFFFFFF
0044330A  |.  33C0          xor     eax, eax
0044330C  |.  F2:AE         repne   scas byte ptr es:[edi]
0044330E  |.  F7D1          not     ecx
00443310  |.  49            dec     ecx
00443311  |.  3BD1          cmp     edx, ecx
00443313  |.  74 07         je      short 0044331C
00443315  |.  33C0          xor     eax, eax
00443317  |.  E9 1C010000   jmp     00443438
0044331C  |>  BF A8495A00   mov     edi, 005A49A8                    ;  ASCII "SI3US"
下面是一些检查注册好代码这里有个全局数据
第一部分其实就是 SI3US
-----------------------------------------------------------------------

第2部分 主要部分 前面的检查路过
004433F5  |> \8B45 E4       mov     eax, dword ptr [ebp-1C]
004433F8  |.  40            inc     eax
004433F9  |.  8945 F4       mov     dword ptr [ebp-C], eax
004433FC  |.  8B7D F4       mov     edi, dword ptr [ebp-C]
004433FF  |.  83C9 FF       or      ecx, FFFFFFFF
00443402  |.  33C0          xor     eax, eax
00443404  |.  F2:AE         repne   scas byte ptr es:[edi]
00443406  |.  F7D1          not     ecx
00443408  |.  49            dec     ecx
00443409  |.  83F9 05       cmp     ecx, 5
0044340C  |.  74 04         je      short 00443412
0044340E  |.  33C0          xor     eax, eax
00443410  |.  EB 26         jmp     short 00443438
00443412  |>  FF75 F0       push    dword ptr [ebp-10]
00443415  |.  E8 CB1B0B00   call    004F4FE5    // 这个函数进去

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

004F4FE5  /$  55            push    ebp
004F4FE6  |.  8BEC          mov     ebp, esp
004F4FE8  |.  83EC 10       sub     esp, 10
004F4FEB  |.  FF75 08       push    dword ptr [ebp+8]
004F4FEE  |.  E8 FF690200   call    0051B9F2   // 这个函数进去见下面
004F4FF3  |.  59            pop     ecx
004F4FF4  |.  8945 F0       mov     dword ptr [ebp-10], eax
004F4FF7  |.  8B45 F0       mov     eax, dword ptr [ebp-10]
004F4FFA  |.  8945 FC       mov     dword ptr [ebp-4], eax
004F4FFD  |.  8365 F4 00    and     dword ptr [ebp-C], 0
004F5001  |.  8B45 08       mov     eax, dword ptr [ebp+8]
004F5004  |.  8945 F8       mov     dword ptr [ebp-8], eax
004F5007  |.  EB 07         jmp     short 004F5010
004F5009  |>  8B45 F8       /mov     eax, dword ptr [ebp-8]
004F500C  |.  40            |inc     eax
004F500D  |.  8945 F8       |mov     dword ptr [ebp-8], eax
004F5010  |>  8B45 F8        mov     eax, dword ptr [ebp-8]
004F5013  |.  0FB600        |movzx   eax, byte ptr [eax]
004F5016  |.  85C0          |test    eax, eax
004F5018  |.  74 2C         |je      short 004F5046
004F501A  |.  8B45 F8       |mov     eax, dword ptr [ebp-8]
004F501D  |.  0FB600        |movzx   eax, byte ptr [eax]
004F5020  |.  8B4D F4       |mov     ecx, dword ptr [ebp-C]
004F5023  |.  33048D B0495A>|xor     eax, dword ptr [ecx*4+5A49B0]
004F502A  |.  8B4D FC       |mov     ecx, dword ptr [ebp-4]
004F502D  |.  8D0488        |lea     eax, dword ptr [eax+ecx*4]
004F5030  |.  8945 FC       |mov     dword ptr [ebp-4], eax
004F5033  |.  8B45 F4       |mov     eax, dword ptr [ebp-C]
004F5036  |.  40            |inc     eax
004F5037  |.  8945 F4       |mov     dword ptr [ebp-C], eax
004F503A  |.  837D F4 0A    |cmp     dword ptr [ebp-C], 0A
004F503E  |.  75 04         |jnz     short 004F5044
004F5040  |.  8365 F4 00    |and     dword ptr [ebp-C], 0
004F5044  |>^ EB C3         \jmp     short 004F5009
004F5046  |>  8B45 FC       mov     eax, dword ptr [ebp-4]
004F5049  |.  33D2          xor     edx, edx
004F504B  |.  B9 A0860100   mov     ecx, 186A0
004F5050  |.  F7F1          div     ecx
004F5052  |.  8BC2          mov     eax, edx
004F5054  |.  C9            leave
004F5055  \.  C2 0400       retn    4

。。。。。。。。。。。。。。。。。。
0051B9F2  /$  FF7424 04     push    dword ptr [esp+4]
0051B9F6  |.  E8 6CFFFFFF   call    0051B967  //进去
0051B9FB  |.  59            pop     ecx
0051B9FC  \.  C3            retn
。。。。。。。。。。。。。。。。。。。。。。。。。。。
0051B967  /$  53            push    ebx
0051B968  |.  55            push    ebp
0051B969  |.  56            push    esi
0051B96A  |.  57            push    edi
0051B96B  |.  8B7C24 14     mov     edi, dword ptr [esp+14]
0051B96F  |>  833D 9C9C5B00>/cmp     dword ptr [5B9C9C], 1
0051B976  |.  7E 0F         |jle     short 0051B987
0051B978  |.  0FB607        |movzx   eax, byte ptr [edi]
0051B97B  |.  6A 08         |push    8
0051B97D  |.  50            |push    eax
0051B97E  |.  E8 DB090000   |call    0051C35E
0051B983  |.  59            |pop     ecx
0051B984  |.  59            |pop     ecx
0051B985  |.  EB 0F         |jmp     short 0051B996
0051B987  |>  0FB607        |movzx   eax, byte ptr [edi]
0051B98A  |.  8B0D 909A5B00 |mov     ecx, dword ptr [5B9A90]         ;  Insight3.005B9A9A
0051B990  |.  8A0441        |mov     al, byte ptr [ecx+eax*2]
0051B993  |.  83E0 08       |and     eax, 8
0051B996  |>  85C0          |test    eax, eax
0051B998  |.  74 03         |je      short 0051B99D
0051B99A  |.  47            |inc     edi
0051B99B  |.^ EB D2         \jmp     short 0051B96F
0051B99D  |>  0FB637        movzx   esi, byte ptr [edi]
0051B9A0  |.  47            inc     edi
0051B9A1  |.  83FE 2D       cmp     esi, 2D
0051B9A4  |.  8BEE          mov     ebp, esi
0051B9A6  |.  74 05         je      short 0051B9AD
0051B9A8  |.  83FE 2B       cmp     esi, 2B
0051B9AB  |.  75 04         jnz     short 0051B9B1
0051B9AD  |>  0FB637        movzx   esi, byte ptr [edi]
0051B9B0  |.  47            inc     edi
0051B9B1  |>  33DB          xor     ebx, ebx
0051B9B3  |>  833D 9C9C5B00>/cmp     dword ptr [5B9C9C], 1
0051B9BA  |.  7E 0C         |jle     short 0051B9C8
0051B9BC  |.  6A 04         |push    4
0051B9BE  |.  56            |push    esi
0051B9BF  |.  E8 9A090000   |call    0051C35E // 这里进去看看
0051B9C4  |.  59            |pop     ecx
0051B9C5  |.  59            |pop     ecx
0051B9C6  |.  EB 0B         |jmp     short 0051B9D3
0051B9C8  |>  A1 909A5B00   |mov     eax, dword ptr [5B9A90]
0051B9CD  |.  8A0470        |mov     al, byte ptr [eax+esi*2]
0051B9D0  |.  83E0 04       |and     eax, 4
0051B9D3  |>  85C0          |test    eax, eax
0051B9D5  |.  74 0D         |je      short 0051B9E4
0051B9D7  |.  8D049B        |lea     eax, dword ptr [ebx+ebx*4]
0051B9DA  |.  8D5C46 D0     |lea     ebx, dword ptr [esi+eax*2-30]
0051B9DE  |.  0FB637        |movzx   esi, byte ptr [edi]
0051B9E1  |.  47            |inc     edi
0051B9E2  |.^ EB CF         \jmp     short 0051B9B3
0051B9E4  |>  83FD 2D       cmp     ebp, 2D
0051B9E7  |.  8BC3          mov     eax, ebx
0051B9E9  |.  75 02         jnz     short 0051B9ED
0051B9EB  |.  F7D8          neg     eax
0051B9ED  |>  5F            pop     edi
0051B9EE  |.  5E            pop     esi
0051B9EF  |.  5D            pop     ebp
0051B9F0  |.  5B            pop     ebx
0051B9F1  \.  C3            retn

这里
0051B9B3  |>  833D 9C9C5B00>/cmp     dword ptr [5B9C9C], 1
0051B9BA  |.  7E 0C         |jle     short 0051B9C8
0051B9BC  |.  6A 04         |push    4
0051B9BE  |.  56            |push    esi
0051B9BF  |.  E8 9A090000   |call    0051C35E // 这里

0x5B9C9C的数据一出来就被初始化为 1,而我下了内存访问断点也一直没有改变所有。这里的函数0051C35E就不会被跑到
但是这个函数的功能是支持unicode的注册。里面也是自己处理把unicode转化为多字节码。不过我们没有到时候就空了
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
第2部分的主要过程。
1)0051B9F2 函数是asctohex 。
2)然后在004F4FE5 里做运算
3)生成一个5为数 和 第3部分把字符变成16进制 数据 做比较
注意里面的几个内存数据 是我们要运算用到的
1)0051B9F2里面
004F5020  |.  8B4D F4       |mov     ecx, dword ptr [ebp-C]
004F5023  |.  33048D B0495A>|xor     eax, dword ptr [ecx*4+5A49B0]
2)004F4FE5
0051B9C8  |>  A1 909A5B00   |mov     eax, dword ptr [5B9A90]
0051B9CD  |.  8A0470        |mov     al, byte ptr [eax+esi*2]
3)还有一个是在字符检查里面
004433E3  |.  8B4D E8       |mov     ecx, dword ptr [ebp-18]
004433E6  |.  3B0C85 488C53>|cmp     ecx, dword ptr [eax*4+538C48]
------------------------------------------------------------
over

代码
主要是对它的函数的封装 使用了mfc 主要是为了支持剪切板功能

#include "stdafx.h"
#include "string.h"
#include "stdio.h"
#include <stdlib.h>

DWORD D_5B9C9C = 1;

unsigned char S_5A49B0[]  =   
"\x96\x00\x00\x00\x95\x00\x00\x00\x10\x00\x00\x00\x23\x00\x00\x00\
\x07\x00\x00\x00\x15\x00\x00\x00\x08\x00\x00\x00\x03\x00\x00\x00\
\x10\x00\x00\x00\x11\x00\x00\x00\x63\x3A\x5C\x76\x33\x35\x5C\x73\
\x65\x72\x69\x61\x6C\x2E\x63\x00\x63\x3A\x5C\x76\x33\x35\x5C\x73";

DWORD S_538C48[]=
{
        0x00003039,0x0001E240,0x00039447,0x0005464E,
        0x0600F855,0x0008AA52,0x000A5BF5,0x000980D0,
        0x0B00ADD0,0x000980D0,0x00030448,0x00030379,
        0x0800AF93,0x00030379,0x000007B9,0x000F2F90,
        0x0900FF66,0x0008AA52,0x0000F3A0,0x00030379,
        0x0800AA52,0x000062AF,0x000002AD,0x765C3A63,
        0x5C743533,0x626C6F6F,0x505C786F,0x4978656C,
        0x5C50786F,0x4978656C,0x00632E4C,0x765C3A63,
        0x5C743533,0x626C6F6F,0x505C786F,0x4978656C,
        0x63002E4C,0x765C3A63,0x745C3533,0x626C6F6F,
        0x5C55786F,0x496C6974,0x00632E4C,0x765C3A63,
        0x5C743533,0x626C6F6F,0x555C786F,0x496C6974,
        0x63002E4C,0x765C3A63,0x745C3533,0x626C6F6F,
        0x5C55786F,0x496C6974,0x00632E4C,0x765C3A63,
        0x5C743533,0x626C6F6F,0x535C786F,0x495F6C6C,
        0x63002E4C,0x765C3A63,0x745C3533,0x626C6F6F
};

char* S_5B9A90   =
"\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\
\x20\x00\x28\x00\x28\x00\x28\x00\x28\x00\x28\x00\x20\x00\x20\x00\
\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\
\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\x20\x00\
\x48\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\
\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\
\x84\x00\x84\x00\x84\x00\x84\x00\x84\x00\x84\x00\x84\x00\x84\x00\
\x84\x00\x84\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\
\x10\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x81\x00\x01\x00\
\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\
\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\x01\x00\
\x01\x00\x01\x00\x01\x00\x10\x00\x10\x00\x10\x00\x10\x00\x10\x00\
\x10\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x82\x00\x02\x00\
\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\
\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\x02\x00\
\x02\x00\x02\x00\x02\x00\x10\x00\x10\x00\x10\x00\x10\x00\x20\x00\
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00";

char serial[256]={0};

void Get_FirstSerial();
int  Get_004F4FE5(char * serial);
void Check_0051B9F2(char* serial);
int AscToHex_0051B9F2(char* serial);
void ATOH_0051B967(char*);
void G_0051C35E(int ,char*);
int Check(int key);
void Convert_Str(char*);
using namespace std;
int _tmain()
{
        char temp[256] = {0};
        printf("输 入 长 度 6 位 的 字 符 和 数 字 !\n");
        while(gets(temp))
        {
                if(strlen(temp) == 6)       
                        break;
        }
       
        Convert_Str(temp);
        Get_FirstSerial();
        int hexkey=AscToHex_0051B9F2(temp);
        if(!Check(hexkey))
        {
                printf(".................\n");
                system("pause");
                return 0;
        }
        int len =strlen(serial);
        sprintf(&serial[len],"%s%s","-",temp);
        int key2 = Get_004F4FE5(temp);
        itoa(key2,temp,10);
        len =strlen(serial);
        sprintf(&serial[len],"%s%s","-",temp);
        printf("%s\n",serial);
        //copy to clipboard
        if(OpenClipboard(NULL))
        {
                HANDLE hClip;
                char *pBuff;
                EmptyClipboard();
                hClip = GlobalAlloc(GMEM_MOVEABLE,strlen(serial) + 1);
                pBuff = (char*)GlobalLock(hClip);
                strcpy(pBuff,serial);
                GlobalUnlock(hClip);
                SetClipboardData(CF_TEXT,hClip);
                CloseClipboard();
        }
        printf("序列号已经复制到剪切板, 按ctrl + v 粘贴!\n");
        system("pause");
        return 0;
}
        void Get_FirstSerial()
        {
                strcpy(serial,"SI3US");
        }
        int Get_004F4FE5(char * serial)
        {
                _asm
                {
                                push    dword ptr [ebp+0x8]
                                call    AscToHex_0051B9F2
                                pop     ecx
                                mov     dword ptr [ebp-0x10], eax
                                mov     eax, dword ptr [ebp-0x10]
                                mov     dword ptr [ebp-0x4], eax
                                and     dword ptr [ebp-0xC], 0
                                mov     eax, dword ptr [ebp+0x8]
                                mov     dword ptr [ebp-0x8], eax
                                jmp     short L004F5010
L004F5009:                mov     eax, dword ptr [ebp-0x8]      
                                inc     eax                          
                                mov     dword ptr [ebp-0x8], eax      
L004F5010:      mov     eax, dword ptr [ebp-0x8]      
                                movzx   eax, byte ptr [eax]         
                                test    eax, eax                     
                                je      short L004F5046               
                                mov     eax, dword ptr [ebp-0x8]      
                                movzx   eax, byte ptr [eax]         
                                mov     ecx, dword ptr [ebp-0xC]      
                                xor     eax, dword ptr [S_5A49B0+ecx*4]
                                mov     ecx, dword ptr [ebp-0x4]      
                                lea     eax, dword ptr [eax+ecx*4]
                                mov     dword ptr [ebp-4], eax      
                                mov     eax, dword ptr [ebp-0xC]      
                                inc     eax                          
                                mov     dword ptr [ebp-0xC], eax      
                                cmp     dword ptr [ebp-0xC], 0xA        
                                jnz     short L004F5044               
                                and     dword ptr [ebp-0xC], 0         
L004F5044:            jmp     short L004F5009               
L004F5046:      mov     eax, dword ptr [ebp-0x4]
                            xor     edx, edx
                                mov     ecx, 0x186A0
                                div     ecx
                                mov     eax, edx
                }
        }

        int AscToHex_0051B9F2(char* key)
        {
                _asm
                {
                        push    dword ptr [ebp+0x8]
                        call    ATOH_0051B967         
                        pop     ecx               

                }
        }

        void ATOH_0051B967(char * str)
        {
                _asm
                {
                                push    ebx                                                   
                                push    ebp                                                   
                                push    esi                                                   
                                push    edi                                                                                   
                                mov     edi, dword ptr [ebp+0x8]                                
L0051B96F:                cmp    D_5B9C9C, 1         
                                jle     short L0051B987                 
                                movzx   eax, byte ptr [edi]            
                                push    0x8                              
                                push    eax                           
L0051B97E:                call    G_0051C35E                       
                                pop     ecx                           
                                pop     ecx                           
                                jmp     short L0051B996                 
L0051B987:                movzx   eax, byte ptr [edi]            
                                mov     ecx, S_5B9A90        
                                mov     al, byte ptr [ecx+eax*2]      
                                and     eax, 0x8                        
L0051B996:                test    eax, eax                       
                                je      short L0051B99D                 
                                inc     edi                           
                                jmp     short L0051B96F                 
L0051B99D:      movzx   esi, byte ptr [edi]                                    
                                inc     edi                                                   
                                cmp     esi, 0x2D                                                
                                mov     ebp, esi                                               
                                je      short L0051B9AD                                         
                                cmp     esi, 0x2B                                                
                                jnz     short L0051B9B1                                         
L0051B9AD:                movzx   esi, byte ptr [edi]                                    
                                inc     edi                                                   
L0051B9B1:                xor     ebx, ebx                                               
L0051B9B3:                cmp     D_5B9C9C, 1                                 
                                jle     short L0051B9C8                                 
                                push    4                                             
                                push    esi                                            
L0051B9BF:                call    G_0051C35E                                       
                                pop     ecx                                            
                                pop     ecx                                            
                                jmp     short L0051B9D3                                 
L0051B9C8:                mov     eax, S_5B9A90                       
                                mov     al, byte ptr [eax+esi*2]                       
                                and     eax, 4                                         
L0051B9D3:                test    eax, eax                                       
                                je      short L0051B9E4                                 
                                lea     eax, dword ptr [ebx+ebx*4]                     
                                lea     ebx, dword ptr [esi+eax*2-0x30]                  
                                movzx   esi, byte ptr [edi]                           
                                inc     edi                                            
                                jmp     short L0051B9B3                                 
L0051B9E4:                cmp     ebp, 0x2D                                                
                                mov     eax, ebx                                               
                                jnz     short L0051B9ED                                         
                                neg     eax                                                   
L0051B9ED:                pop     edi                                                   
                                pop     esi                                                   
                                pop     ebp                                                   
                                pop     ebx                                                   
                }
        }

        int Check(int key)
        {
                _asm
                {
                        mov     eax ,dword ptr [ebp+0x8]
                        mov     dword ptr [ebp-0x18], eax
                        and     dword ptr [ebp-0x14], 0
                        jmp     short L004433DA                          
L004433D3:  mov     eax, dword ptr [ebp-0x14]
                        inc     eax                                    
                        mov     dword ptr [ebp-0x14], eax                 
L004433DA:  cmp     dword ptr [ebp-0x14], 0x17   
                    jnb     short L004433F5                          
                    mov     eax, dword ptr [ebp-0x14]                 
                        mov     ecx, dword ptr [ebp-0x18]                 
                        cmp     ecx, dword ptr [eax*4+S_538C48]
                        jnz     short L004433F3                          
                        xor     eax, eax                                
                        jmp     short L00443438  
L004433F3:  jmp     short L004433D3
L004433F5:
L00443438:

                }
        }
        void G_0051C35E(int ,char*)
        {

        }

        void Convert_Str(char * str)
        {
                char *cp;   
                for ( cp = str ; *cp ; ++cp )
                        if ( ('a' <= *cp) && (*cp <= 'z') )
                                *cp -= 'a' - 'A';
        }
       
        -------------------------------------------
        谢谢各位大侠路过。。。。。。。。。


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 7
支持
分享
最新回复 (2)
雪    币: 563
活跃值: (95)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
用shellcode 的。
2011-1-3 08:52
0
雪    币: 239
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
看不得很明白
2011-1-9 23:25
0
游客
登录 | 注册 方可回帖
返回
//