首页
社区
课程
招聘
[原创]CTF2018-第二题-半加器
发表于: 2018-12-4 17:06 3055

[原创]CTF2018-第二题-半加器

2018-12-4 17:06
3055

一、分析工具

     IDA、OD

二、分析过程
       1、双击运行,发现有个输入序列号的提示: "Please Input:"
       2、打开IDA,把exe拖进去shift+F12查看字符串,根据字符串的交叉引用定位到提示输入系列号的地址在:0x004A19D8
           
.text:004A19D8                 push    offset aPleaseInput ; "Please Input:"
.text:004A19DD                 push    offset unk_5F31E0
.text:004A19E2                 call    sub_48CD46
.text:004A19E7                 add     esp, 8
.text:004A19EA                 push    1Eh
.text:004A19EC                 push    offset unk_5F3068
.text:004A19F1                 push    offset aS       ; "%s"
.text:004A19F6                 call    sub_48C0EE
.text:004A19FB                 add     esp, 0Ch
.text:004A19FE                 push    offset unk_5F3068
.text:004A1A03                 call    j_strlen_
.text:004A1A08                 add     esp, 4
.text:004A1A0B                 mov     [ebp+var_8], eax
.text:004A1A0E                 cmp     [ebp+var_8], 1Eh
.text:004A1A12                 jg      short loc_4A1A1A;序列号的长度大于0x1E,输入错误
.text:004A1A14                 cmp     [ebp+var_8], 0Ah
.text:004A1A18                 jge     short loc_4A1A30;序列号的长度大于等于0x0A,继续

.text:004A19D8                 push    offset aPleaseInput ; "Please Input:"
.text:004A19DD                 push    offset unk_5F31E0
.text:004A19E2                 call    sub_48CD46
.text:004A19E7                 add     esp, 8
.text:004A19EA                 push    1Eh
.text:004A19EC                 push    offset unk_5F3068
.text:004A19F1                 push    offset aS       ; "%s"
.text:004A19F6                 call    sub_48C0EE
.text:004A19FB                 add     esp, 0Ch
.text:004A19FE                 push    offset unk_5F3068
.text:004A1A03                 call    j_strlen_
.text:004A1A08                 add     esp, 4
.text:004A1A0B                 mov     [ebp+var_8], eax
.text:004A1A0E                 cmp     [ebp+var_8], 1Eh
.text:004A1A12                 jg      short loc_4A1A1A;序列号的长度大于0x1E,输入错误
.text:004A1A14                 cmp     [ebp+var_8], 0Ah
.text:004A1A18                 jge     short loc_4A1A30;序列号的长度大于等于0x0A,继续

       3、根据第二步的长度判断,符合长度限定之后来到地址:0x4A1A30,并找到序列号生成算法的函数在sub_48D3A4
.text:004A1A30 loc_4A1A30:                             ; CODE XREF: main+68j
.text:004A1A30                 push    offset unk_5F3068
.text:004A1A35                 push    1Eh
.text:004A1A37                 mov     eax, dword_5F3088
.text:004A1A3C                 push    eax
.text:004A1A3D                 call    sub_48E5BF;拷贝序列号到地址0x5F3068
.text:004A1A42                 add     esp, 0Ch
.text:004A1A45                 mov     eax, 1
.text:004A1A4A                 imul    ecx, eax, 7
.text:004A1A4D                 mov     edx, dword_5F3088
.text:004A1A53                 movsx   eax, byte ptr [edx+ecx]
.text:004A1A57                 cmp     eax, 41h
.text:004A1A5A                 jz      short loc_4A1A70;判断序号的第8位是不是'A',如果不是则失败
.text:004A1A5C                 push    offset unk_5B25CC
.text:004A1A61                 call    sub_48A6DB
.text:004A1A66                 add     esp, 4
.text:004A1A69                 push    0
.text:004A1A6B                 call    sub_48C274
.text:004A1A70
.text:004A1A70 loc_4A1A70:                             ; CODE XREF: main+AAj
.text:004A1A70                 mov     eax, dword_5F3088
.text:004A1A75                 push    eax
.text:004A1A76                 call    sub_48D3A4;序列号生成算法
.text:004A1A7B                 add     esp, 4
.text:004A1A7E
.text:004A1A7E loc_4A1A7E:                             ; CODE XREF: main+7Ej
.text:004A1A7E                 xor     eax, eax

.text:004A1A30 loc_4A1A30:                             ; CODE XREF: main+68j
.text:004A1A30                 push    offset unk_5F3068
.text:004A1A35                 push    1Eh
.text:004A1A37                 mov     eax, dword_5F3088
.text:004A1A3C                 push    eax
.text:004A1A3D                 call    sub_48E5BF;拷贝序列号到地址0x5F3068
.text:004A1A42                 add     esp, 0Ch
.text:004A1A45                 mov     eax, 1
.text:004A1A4A                 imul    ecx, eax, 7
.text:004A1A4D                 mov     edx, dword_5F3088
.text:004A1A53                 movsx   eax, byte ptr [edx+ecx]
.text:004A1A57                 cmp     eax, 41h
.text:004A1A5A                 jz      short loc_4A1A70;判断序号的第8位是不是'A',如果不是则失败
.text:004A1A5C                 push    offset unk_5B25CC
.text:004A1A61                 call    sub_48A6DB
.text:004A1A66                 add     esp, 4
.text:004A1A69                 push    0
.text:004A1A6B                 call    sub_48C274
.text:004A1A70
.text:004A1A70 loc_4A1A70:                             ; CODE XREF: main+AAj
.text:004A1A70                 mov     eax, dword_5F3088
.text:004A1A75                 push    eax
.text:004A1A76                 call    sub_48D3A4;序列号生成算法
.text:004A1A7B                 add     esp, 4
.text:004A1A7E
.text:004A1A7E loc_4A1A7E:                             ; CODE XREF: main+7Ej
.text:004A1A7E                 xor     eax, eax

        4、分析序列号生成算法 : sub_48D3A4 ,这个算法分两个步骤
              1)、把序列号的第8位‘A’替换成'#'

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

最后于 2018-12-4 20:46 被MTRush编辑 ,原因:
收藏
免费 1
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//