吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 2461|回复: 8
收起左侧

[求助] 二叉树遍历 小弟刚学的 逆向到这个二叉树 不知道怎么用C++或者易语言把它写出来了...

[复制链接]
609958842 发表于 2020-12-21 20:34
本帖最后由 609958842 于 2020-12-21 20:35 编辑

[[遍历基址]+8]=遍历头

[[[[[[[[[[[[[[[[遍历基址]+8]+0]+0]+0]+0]+4]+8]+4]+8]+4]+14]+20]+c]+14]+50]+14 =非言女
[[[[[[[[[[[[[[遍历基址]+8]+0]+0]+0]+4]+8]+4]+8]+4]+14]+20]+c]+14]+50]+14 =村长
[[[[[[[[[[[[[[遍历基址]+8]+0]+0]+4]+8]+4]+8]+4]+14]+20]+c]+14]+50]+14 =非言女
[[[[[[[[[[[[[遍历基址]+8]+0]+4]+8]+4]+8]+4]+14]+20]+c]+14]+50]+14 =村长
[[[[[[[[[[[0D02D020]+4]+8]+4]+8]+4]+14]+20]+c]+14]+50]+14=非言女
以下是逆向分析过程:1113B8D0 - 8B 30  - mov esi,[eax]0D559980
1113B920 - 8B 46 04  - mov eax,[esi+04] <<229238E0
1113B901 - 8B 46 08  - mov eax,[esi+08] <<0AE11868
1113B920 - 8B 46 04  - mov eax,[esi+04] <<ESI=0DE7B3D0
1113B901 - 8B 46 08  - mov eax,[esi+08]ESI=0AE11868
1113B920 - 8B 46 04  - mov eax,[esi+04]0DE7B3D0
1113B8D6  |> /8B46 14       /mov     eax, dword ptr [esi+0x14]
0AE11868
115123C6 - 89 7E 38  - mov [esi+38],edi
ESI=22852330
以下是完整二叉树遍历汇编代码:



1113B890  /$  6A FF         push    -0x1

1113B892  |.  68 C8ACBF11   push    11BFACC8

1113B897  |.  64:A1 0000000>mov     eax, dword ptr fs:[0]

1113B89D  |.  50            push    eax

1113B89E  |.  83EC 18       sub     esp, 0x18

1113B8A1  |.  53            push    ebx

1113B8A2  |.  55            push    ebp

1113B8A3  |.  56            push    esi

1113B8A4  |.  57            push    edi

1113B8A5  |.  A1 30638712   mov     eax, dword ptr [0x12876330]

1113B8AA  |.  33C4          xor     eax, esp

1113B8AC  |.  50            push    eax

1113B8AD  |.  8D4424 2C     lea     eax, dword ptr [esp+0x2C]

1113B8B1  |.  64:A3 0000000>mov     dword ptr fs:[0], eax

1113B8B7  |.  8BE9          mov     ebp, ecx

1113B8B9  |.  33DB          xor     ebx, ebx

1113B8BB  |.  895C24 20     mov     dword ptr [esp+0x20], ebx

1113B8BF  |.  895C24 24     mov     dword ptr [esp+0x24], ebx

1113B8C3  |.  895C24 28     mov     dword ptr [esp+0x28], ebx

1113B8C7  |.  895C24 34     mov     dword ptr [esp+0x34], ebx

1113B8CB  |.  8B45 08       mov     eax, dword ptr [ebp+0x8]

1113B8CE  |.  8B00          mov     eax, dword ptr [eax]

1113B8D0  |.  8B30          mov     esi, dword ptr [eax]

1113B8D2  |.  3BF0          cmp     esi, eax

1113B8D4  |.  74 77         je      short 1113B94D

1113B8D6  |>  8B46 14       /mov     eax, dword ptr [esi+0x14]

1113B8D9  |.  8078 18 00    |cmp     byte ptr [eax+0x18], 0x0

1113B8DD  |.  74 15         |je      short 1113B8F4

1113B8DF  |.  8378 10 00    |cmp     dword ptr [eax+0x10], 0x0

1113B8E3  |.  75 0F         |jnz     short 1113B8F4

1113B8E5  |.  8D46 10       |lea     eax, dword ptr [esi+0x10]

1113B8E8  |.  50            |push    eax

1113B8E9  |.  8D4C24 24     |lea     ecx, dword ptr [esp+0x24]

1113B8ED  |.  E8 7E070000   |call    1113C070

1113B8F2  |.  EB 07         |jmp     short 1113B8FB

1113B8F4  |>  C740 14 00000>|mov     dword ptr [eax+0x14], 0x0

1113B8FB  |>  807E 0D 00    |cmp     byte ptr [esi+0xD], 0x0

1113B8FF  |.  75 41         |jnz     short 1113B942

1113B901  |.  8B46 08       |mov     eax, dword ptr [esi+0x8]        ;  这句

1113B904  |.  8078 0D 00    |cmp     byte ptr [eax+0xD], 0x0

1113B908  |.  75 16         |jnz     short 1113B920

1113B90A  |.  8BF0          |mov     esi, eax

1113B90C  |.  8B06          |mov     eax, dword ptr [esi]            ;  2266E7E8

1113B90E  |.  8078 0D 00    |cmp     byte ptr [eax+0xD], 0x0

1113B912  |.  75 2E         |jnz     short 1113B942

1113B914  |>  8BF0          |/mov     esi, eax

1113B916  |.  8B06          ||mov     eax, dword ptr [esi]

1113B918  |.  8078 0D 00    ||cmp     byte ptr [eax+0xD], 0x0

1113B91C  |.^ 74 F6         |\je      short 1113B914

1113B91E  |.  EB 22         |jmp     short 1113B942

1113B920  |>  8B46 04       |mov     eax, dword ptr [esi+0x4]        ;  这句

1113B923  |.  8078 0D 00    |cmp     byte ptr [eax+0xD], 0x0

1113B927  |.  75 17         |jnz     short 1113B940

1113B929  |.  8DA424 000000>|lea     esp, dword ptr [esp]

1113B930  |>  3B70 08       |/cmp     esi, dword ptr [eax+0x8]

1113B933  |.  75 0B         ||jnz     short 1113B940

1113B935  |.  8BF0          ||mov     esi, eax

1113B937  |.  8B40 04       ||mov     eax, dword ptr [eax+0x4]

1113B93A  |.  8078 0D 00    ||cmp     byte ptr [eax+0xD], 0x0

1113B93E  |.^ 74 F0         |\je      short 1113B930

1113B940  |>  8BF0          |mov     esi, eax

1113B942  |>  8B45 08       |mov     eax, dword ptr [ebp+0x8]

1113B945  |.  3B30          |cmp     esi, dword ptr [eax]

1113B947  |.^ 75 8D         \jnz     short 1113B8D6                  ;  2266E7E8

1113B949  |.  8B5C24 20     mov     ebx, dword ptr [esp+0x20]

1113B94D  |>  8BFB          mov     edi, ebx

1113B94F  |.  3B5C24 24     cmp     ebx, dword ptr [esp+0x24]

1113B953  |.  74 77         je      short 1113B9CC

1113B955  |.  8B5C24 24     mov     ebx, dword ptr [esp+0x24]

1113B959  |.  8DA424 000000>lea     esp, dword ptr [esp]

1113B960  |>  8B45 08       /mov     eax, dword ptr [ebp+0x8]

1113B963  |.  8B30          |mov     esi, dword ptr [eax]

1113B965  |.  8BCE          |mov     ecx, esi

1113B967  |.  8B46 04       |mov     eax, dword ptr [esi+0x4]

1113B96A  |.  8078 0D 00    |cmp     byte ptr [eax+0xD], 0x0

1113B96E  |.  75 16         |jnz     short 1113B986

1113B970  |.  8B17          |mov     edx, dword ptr [edi]

1113B972  |>  3950 10       |/cmp     dword ptr [eax+0x10], edx

1113B975  |.  7D 05         ||jge     short 1113B97C

1113B977  |.  8B40 08       ||mov     eax, dword ptr [eax+0x8]

1113B97A  |.  EB 04         ||jmp     short 1113B980

1113B97C  |>  8BC8          ||mov     ecx, eax

1113B97E  |.  8B00          ||mov     eax, dword ptr [eax]

1113B980  |>  8078 0D 00    ||cmp     byte ptr [eax+0xD], 0x0

1113B984  |.^ 74 EC         |\je      short 1113B972

1113B986  |>  3BCE          |cmp     ecx, esi

1113B988  |.  74 11         |je      short 1113B99B

1113B98A  |.  8B07          |mov     eax, dword ptr [edi]

1113B98C  |.  3B41 10       |cmp     eax, dword ptr [ecx+0x10]

1113B98F  |.  7C 0A         |jl      short 1113B99B

1113B991  |.  894C24 14     |mov     dword ptr [esp+0x14], ecx

1113B995  |.  8D7424 14     |lea     esi, dword ptr [esp+0x14]

1113B999  |.  EB 08         |jmp     short 1113B9A3

1113B99B  |>  897424 18     |mov     dword ptr [esp+0x18], esi

1113B99F  |.  8D7424 18     |lea     esi, dword ptr [esp+0x18]

1113B9A3  |>  8B36          |mov     esi, dword ptr [esi]

1113B9A5  |.  8B4E 14       |mov     ecx, dword ptr [esi+0x14]

1113B9A8  |.  85C9          |test    ecx, ecx

1113B9AA  |.  74 07         |je      short 1113B9B3

1113B9AC  |.  8B01          |mov     eax, dword ptr [ecx]

1113B9AE  |.  6A 01         |push    0x1

1113B9B0  |.  FF50 04       |call    dword ptr [eax+0x4]

1113B9B3  |>  8B4D 08       |mov     ecx, dword ptr [ebp+0x8]

1113B9B6  |.  8D4424 1C     |lea     eax, dword ptr [esp+0x1C]

1113B9BA  |.  56            |push    esi

1113B9BB  |.  50            |push    eax

1113B9BC  |.  E8 BF070000   |call    1113C180

1113B9C1  |.  83C7 04       |add     edi, 0x4

1113B9C4  |.  3BFB          |cmp     edi, ebx

1113B9C6  |.^ 75 98         \jnz     short 1113B960

1113B9C8  |.  8B5C24 20     mov     ebx, dword ptr [esp+0x20]

1113B9CC  |>  85DB          test    ebx, ebx

1113B9CE  |.  74 09         je      short 1113B9D9

1113B9D0  |.  53            push    ebx

1113B9D1  |.  E8 9E159100   call    11A4CF74

1113B9D6  |.  83C4 04       add     esp, 0x4

1113B9D9  |>  8B4C24 2C     mov     ecx, dword ptr [esp+0x2C]

1113B9DD  |.  64:890D 00000>mov     dword ptr fs:[0], ecx

1113B9E4  |.  59            pop     ecx

1113B9E5  |.  5F            pop     edi

1113B9E6  |.  5E            pop     esi

1113B9E7  |.  5D            pop     ebp

1113B9E8  |.  5B            pop     ebx

1113B9E9  |.  83C4 24       add     esp, 0x24

1113B9EC  \.  C3            retn

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

cbxg1992 发表于 2020-12-21 20:37
看不太懂,大佬
QingYi. 发表于 2020-12-21 21:48
糯米君 发表于 2020-12-21 22:01
蔡庄 发表于 2020-12-21 22:30
先序遍历,中序遍历,后序遍历,层次遍历,回忆起了唯一挂科的数据结构
 楼主| 609958842 发表于 2020-12-21 23:18
已经写好了。。。。
谢谢大家的关注。。。。
艰难啊 卡了三天。终于逆向出来了
sunny_qy 发表于 2020-12-21 23:32
汇编啊,一辈子的痛
A学习的小菜鸟 发表于 2020-12-31 21:07
你有点厉害啊,算法只是个思路,但是你用你想搞算法,这是很困难的,毕竟逆向只是一个大概的作用啊
 楼主| 609958842 发表于 2021-1-6 07:43
.版本 2

    eax = 内存_读整数内存 (进程句柄, esi + 8)
    ' 输出调试文本 (十到十六 (esi))
    .如果真 (内存_读整数内存 (进程句柄, eax + 标识对比偏移, 1) = 0)
        esi = eax
        ' 输出调试文本 (十到十六 (esi))
        eax = 内存_读整数内存 (进程句柄, esi)
        .如果 (内存_读整数内存 (进程句柄, eax + 标识对比偏移, 1) = 0)
            .循环判断首 ()
                esi = eax
                eax = 内存_读整数内存 (进程句柄, esi)
            .循环判断尾 (内存_读整数内存 (进程句柄, eax + 标识对比偏移, 1) = 0)
            到循环尾 ()

        .否则
            到循环尾 ()
        .如果结束

    .如果真结束
    eax = 内存_读整数内存 (进程句柄, esi + 4)
    ' 输出调试文本 (十到十六 (esi))
    .如果真 (内存_读整数内存 (进程句柄, eax + 标识对比偏移, 1) = 0)

        .循环判断首 ()
            ' 输出调试文本 (十到十六 (esi))
            .如果 (内存_读整数内存 (进程句柄, eax + 8) = esi)
                esi = eax
                eax = 内存_读整数内存 (进程句柄, esi + 4)
                ' 输出调试文本 (十到十六 (esi))
            .否则
                跳出循环 ()
            .如果结束

        .循环判断尾 (内存_读整数内存 (进程句柄, eax + 标识对比偏移, 1) = 0)


    .如果真结束

    ' 输出调试文本 (十到十六 (eax))
    esi = eax
逆向前看不懂,逆向后 恍然大悟,原来就是这么个东西
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2025-1-16 15:44

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表