首页
社区
课程
招聘
[求助]这是什么算法...
发表于: 2008-12-28 17:35 2759

[求助]这是什么算法...

2008-12-28 17:35
2759
看了一个对字符串加密的算法看了一天了不知道怎么算...哪位大虾给点思路...
10002DCA   $  55            push    ebp
10002DCB   .  8BEC          mov     ebp, esp                         ;  ebp=esp
10002DCD   .  83C4 F0       add     esp, -10                         ;  esp-10
10002DD0   .  60            pushad                                   ;  PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次压入堆栈.
10002DD1   .  8365 FC 00    and     dword ptr [ebp-4], 0
10002DD5   .  8365 F8 00    and     dword ptr [ebp-8], 0
10002DD9   .  8365 F4 00    and     dword ptr [ebp-C], 0
10002DDD   .  8365 F0 00    and     dword ptr [ebp-10], 0
10002DE1   .  8B7D 14       mov     edi, dword ptr [ebp+14]
10002DE4   .  8B75 18       mov     esi, dword ptr [ebp+18]
10002DE7   .  FC            cld                                      ;  cld清方向标志位
10002DE8   >  33C0          xor     eax, eax                         ;  eax=0
10002DEA   .  AC            lods    byte ptr [esi]                   ;  lods=MOV AL,[SI] INC SI si增1
10002DEB   .  3C 00         cmp     al, 0                            ;  比较 al 0
10002DED   .  74 68         je      short 10002E57                   ;  不跳
10002DEF   .  68 E0000000   push    0E0                              ;  E0=224
10002DF4   .  50            push    eax
10002DF5   .  FF75 0C       push    dword ptr [ebp+C]                ;  压栈 12位 ebp
10002DF8   .  E8 32FFFFFF   call    10002D2F
10002DFD   .  8945 FC       mov     dword ptr [ebp-4], eax           ;  [ebp-4]=eax
10002E00   .  8B45 08       mov     eax, dword ptr [ebp+8]           ;  eax=[ebp+8]
10002E03   .  0345 F0       add     eax, dword ptr [ebp-10]          ;  eax=eax+[ebp-10]
10002E06   .  8A00          mov     al, byte ptr [eax]               ;  al=[eax]
10002E08   .  8845 F4       mov     byte ptr [ebp-C], al             ;  [ebp-c]=al
10002E0B   .  33DB          xor     ebx, ebx                         ;  ebx=0
10002E0D   >  8B45 0C       mov     eax, dword ptr [ebp+C]           ;  eax=[ebp+c]
10002E10   .  0345 FC       add     eax, dword ptr [ebp-4]           ;  eax=eax+[ebp-4]
10002E13   .  8A0403        mov     al, byte ptr [ebx+eax]           ;  al=[ebx+eax]
10002E16   .  3A45 F4       cmp     al, byte ptr [ebp-C]             ;  al =? [ebp-c]
10002E19   .  3A45 F4       cmp     al, byte ptr [ebp-C]
10002E1C   .  75 1C         jnz     short 10002E3A                   ;  不等则跳
10002E1E   .  8B45 0C       mov     eax, dword ptr [ebp+C]           ;  eax=eax+[ebp+c]
10002E21   .  8A0403        mov     al, byte ptr [ebx+eax]           ;  al=[ebx+eax]
10002E24   .  8D4D F8       lea     ecx, dword ptr [ebp-8]           ;  ecx=epp-8
10002E27   .  51            push    ecx
10002E28   .  50            push    eax
10002E29   .  E8 83FEFFFF   call    10002CB1                         ;  貌似做位运算 判断esi 返回8
10002E2E   .  8A45 F8       mov     al, byte ptr [ebp-8]             ;  al=[ebp-8]
10002E31   .  AA            stos    byte ptr es:[edi]                ;  STOS 保存串
10002E32   .  8A45 F9       mov     al, byte ptr [ebp-7]             ;  al=[ebp-7]
10002E35   .  AA            stos    byte ptr es:[edi]                ;  STOS 保存串
10002E36   .  EB 0B         jmp     short 10002E43
10002E38   .  EB 01         jmp     short 10002E3B
10002E3A   >  43            inc     ebx
10002E3B   >  81FB E0000000 cmp     ebx, 0E0
10002E41   .^ 75 CA         jnz     short 10002E0D
10002E43   >  FF45 F0       inc     dword ptr [ebp-10]               ;  [ebp-10]自增1
10002E46   .  8B45 10       mov     eax, dword ptr [ebp+10]          ;  eax=[ebp+10]
10002E49   .  3B45 F0       cmp     eax, dword ptr [ebp-10]          ;  判断 [ebp+10] [ebp-10]
10002E4C   .  75 07         jnz     short 10002E55                   ;  不等则跳
10002E4E   .  C745 F0 00000>mov     dword ptr [ebp-10], 0            ;  [ebp-10]=0
10002E55   >^ EB 91         jmp     short 10002DE8
10002E57   >  61            popad
10002E58   .  C9            leave
10002E59   .  C2 1400       retn    14

call 10002D2F:
10002D2F  /$  55            push    ebp
10002D30  |.  8BEC          mov     ebp, esp
10002D32  |.  53            push    ebx
10002D33  |.  51            push    ecx
10002D34  |.  57            push    edi
10002D35  |.  8B7D 08       mov     edi, dword ptr [ebp+8]           ;  edi 8位
10002D38  |.  8B4D 10       mov     ecx, dword ptr [ebp+10]          ;  ecx 10位
10002D3B  |.  8BD9          mov     ebx, ecx                         ;  ebx=ecx
10002D3D  |.  FC            cld                                      ;  cld即告诉程序si,di向前移动
10002D3E  |.  8A45 0C       mov     al, byte ptr [ebp+C]
10002D41  |.  F2:AE         repne   scas byte ptr es:[edi]           ;  REPNZ/REPNE 不等重复前缀 当ZF=0或比较结果不相等,且CX/ECX0时重复.
10002D43  |.  0BC9          or      ecx, ecx
10002D45  |.  75 04         jnz     short 10002D4B                   ;  jnz非0则跳 即ecx不为0则跳
10002D47  |.  33C0          xor     eax, eax                         ;  eax清0
10002D49  |.  EB 04         jmp     short 10002D4F
10002D4B  |>  2BD9          sub     ebx, ecx                         ;  ecx不为0 则 ebx=ebx-ecx
10002D4D  |.  8BC3          mov     eax, ebx                         ;  eax=ebx
10002D4F  |>  5F            pop     edi
10002D50  |.  59            pop     ecx
10002D51  |.  5B            pop     ebx
10002D52  |.  C9            leave
10002D53  \.  C2 0C00       retn    0C

call 10002CB1:
10002CB1  /$  55            push    ebp
10002CB2  |.  8BEC          mov     ebp, esp                         ;  ebp=esp
10002CB4  |.  53            push    ebx
10002CB5  |.  52            push    edx
10002CB6  |.  56            push    esi
10002CB7  |.  8B55 0C       mov     edx, dword ptr [ebp+C]           ;  edx=[ebp+c]
10002CBA  |.  8B75 08       mov     esi, dword ptr [ebp+8]           ;  esi=[ebp+8]
10002CBD  |.  33C0          xor     eax, eax                         ;  eax=0
10002CBF  |.  33C9          xor     ecx, ecx                         ;  ecx=0
10002CC1  |.  8842 02       mov     byte ptr [edx+2], al             ;  [edx+2]=al
10002CC4  |.  B1 01         mov     cl, 1                            ;  cl=1
10002CC6  |>  8BC6          /mov     eax, esi                        ;  eax=esi
10002CC8  |.  24 0F         |and     al, 0F                          ;  al and 0f   xxxx 1111
10002CCA  |.  3C 0A         |cmp     al, 0A                          ;  al =? 0a    0000 1010
10002CCC  |.  1C 69         |sbb     al, 69                          ;  al-69   带借位减法   0110 1001
10002CCE  |.  2F            |das                                     ;  减法的十进制调整
10002CCF  |.  880411        |mov     byte ptr [ecx+edx], al          ;  [ecx+edx]=al
10002CD2  |.  C1EE 04       |shr     esi, 4                          ;  esi右移4位
10002CD5  |.  49            |dec     ecx                             ;  ecx自减1
10002CD6  |.^ 79 EE         \jns     short 10002CC6                  ;  符号位为0时跳
10002CD8  |.  5E            pop     esi
10002CD9  |.  5A            pop     edx
10002CDA  |.  5B            pop     ebx
10002CDB  |.  C9            leave
10002CDC  \.  C2 0800       retn    8                                ;  返回 8

这个我看一天了 理不清

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

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
2
第一个函数大约是find_first_of

第二个函数大约是hex2str

你再试试看?
2008-12-28 17:59
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
是不是还缺点什么啊?怎么没人回复呢...   另外注释是我自己加的 如果错了 大家帮忙指正啊
2008-12-28 18:05
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
先谢过彭书呆大大了啊! 我看看
2008-12-28 18:06
0
游客
登录 | 注册 方可回帖
返回
//