首页
社区
课程
招聘
KCTF2023第五题 争分夺秒
发表于: 2023-9-13 09:26 9501

KCTF2023第五题 争分夺秒

2023-9-13 09:26
9501

程序存在大量混淆,可根据我们输入的交叉引用和函数返回值的交叉引用进行筛选

输入为base64编码

解编码后[-4:]为crc32校验值

分成2部分

每部分结构

a3、a4为分成的2个部分,交叉引用查找后续处理

校验每部分头部dw,(固定值,可通过求解逆元得到)

函数内通过 call check_ny_4CE450校验dw值

计算逆元

在xor_4E1620函数前后有混淆干扰,
xortable没必要获取,后面可通过校验结果反推。

xor data,通过dw值生成固定xor序列

校验data部分是否为固定值的逆元

可得到a,p,计算逆元可得b

第一部分

a

p

求得逆元b:

a2

p2

求得逆元b2:

但此时b经过前面xor处理,

只需再次构造输入后调试,便可得到正确的data

flag

.text:0047D5F7 loc_47D5F7:                             ; CODE XREF: check_47B430+21A9↑j
.text:0047D5F7                 lea     ecx, [ebp+outsz]
.text:0047D5FD                 push    ecx
.text:0047D5FE                 lea     edx, [ebp+out]
.text:0047D604                 push    edx
.text:0047D605                 mov     eax, [ebp+myinput]
.text:0047D608                 push    eax
.text:0047D609                 call    b64decode_40A580
.text:0047D5F7 loc_47D5F7:                             ; CODE XREF: check_47B430+21A9↑j
.text:0047D5F7                 lea     ecx, [ebp+outsz]
.text:0047D5FD                 push    ecx
.text:0047D5FE                 lea     edx, [ebp+out]
.text:0047D604                 push    edx
.text:0047D605                 mov     eax, [ebp+myinput]
.text:0047D608                 push    eax
.text:0047D609                 call    b64decode_40A580
.text:00480406 loc_480406:                             ; CODE XREF: check_47B430+4FD2↑j
.text:00480406                 mov     edx, [ebp+outsz]
.text:0048040C                 push    edx
.text:0048040D                 mov     eax, [ebp+out]
.text:00480413                 push    eax
.text:00480414                 call    check_crc32_455F80
.text:00480406 loc_480406:                             ; CODE XREF: check_47B430+4FD2↑j
.text:00480406                 mov     edx, [ebp+outsz]
.text:0048040C                 push    edx
.text:0048040D                 mov     eax, [ebp+out]
.text:00480413                 push    eax
.text:00480414                 call    check_crc32_455F80
struct Part{
    DWORD dw;
    DWORD sz;
    BYTE data[sz];
}
 
//整体结构
base64({
    Part1,Part2,Crc32
})
struct Part{
    DWORD dw;
    DWORD sz;
    BYTE data[sz];
}
 
//整体结构
base64({
    Part1,Part2,Crc32
})
.text:00482CEF loc_482CEF:                             ; CODE XREF: check_47B430+78BB↑j
.text:00482CEF                 lea     edx, [ebp+a4]
.text:00482CF5                 push    edx             ; a4
.text:00482CF6                 lea     eax, [ebp+a3]
.text:00482CFC                 push    eax             ; a3
.text:00482CFD                 mov     ecx, [ebp+outsz]
.text:00482D03                 sub     ecx, 4
.text:00482D06                 push    ecx             ; a2
.text:00482D07                 mov     edx, [ebp+out]
.text:00482D0D                 push    edx             ; a1
.text:00482D0E                 call    parse_2part_458D90
.text:00482CEF loc_482CEF:                             ; CODE XREF: check_47B430+78BB↑j
.text:00482CEF                 lea     edx, [ebp+a4]
.text:00482CF5                 push    edx             ; a4
.text:00482CF6                 lea     eax, [ebp+a3]
.text:00482CFC                 push    eax             ; a3
.text:00482CFD                 mov     ecx, [ebp+outsz]
.text:00482D03                 sub     ecx, 4
.text:00482D06                 push    ecx             ; a2
.text:00482D07                 mov     edx, [ebp+out]
.text:00482D0D                 push    edx             ; a1
.text:00482D0E                 call    parse_2part_458D90
.text:00485639 loc_485639:                             ; CODE XREF: check_47B430+A12A↑j
.text:00485639                 mov     ecx, [ebp+a4]
.text:0048563F                 mov     edx, [ecx]
.text:00485641                 push    edx
.text:00485642                 mov     eax, dword ptr [ebp+a3]
.text:00485648                 mov     ecx, [eax]
.text:0048564A                 push    ecx
.text:0048564B                 call    check_part1_2_ny_474170
.text:00485639 loc_485639:                             ; CODE XREF: check_47B430+A12A↑j
.text:00485639                 mov     ecx, [ebp+a4]
.text:0048563F                 mov     edx, [ecx]
.text:00485641                 push    edx
.text:00485642                 mov     eax, dword ptr [ebp+a3]
.text:00485648                 mov     ecx, [eax]
.text:0048564A                 push    ecx
.text:0048564B                 call    check_part1_2_ny_474170
from Crypto.Util.number import*
print('dw1:',hex(inverse(0x7d45,0x346F8717)))
print('dw2:',hex(inverse(0XD711,0X729969FF)))
from Crypto.Util.number import*
print('dw1:',hex(inverse(0x7d45,0x346F8717)))
print('dw2:',hex(inverse(0XD711,0X729969FF)))
.text:004E490F loc_4E490F:                             ; CODE XREF: xor_4E1620+32EB↑j
.text:004E490F                 mov     edx, [ebp+var_42C]
.text:004E4915                 push    edx
.text:004E4916                 mov     eax, [ebp+var_480]
.text:004E491C                 push    eax
.text:004E491D                 mov     ecx, [ebp+var_254]
.text:004E4923                 push    ecx
.text:004E4924                 mov     edx, [ebp+var_248]
.text:004E492A                 push    edx
.text:004E492B                 call    sub_4D6450      ; 生成xor数
.text:004E4930 ; 848:     *(_BYTE *)(v318 + data) ^= v3;
.text:004E4930                 add     esp, 10h
.text:004E4933                 movzx   eax, al
.text:004E4936                 mov     ecx, [ebp+data]
.text:004E4939                 add     ecx, [ebp+index]
.text:004E493F                 movzx   edx, byte ptr [ecx]
.text:004E4942                 xor     edx, eax
.text:004E4944                 mov     eax, [ebp+data]
.text:004E4947                 add     eax, [ebp+index]
.text:004E494D                 mov     [eax], dl        ;异或
.text:004E490F loc_4E490F:                             ; CODE XREF: xor_4E1620+32EB↑j
.text:004E490F                 mov     edx, [ebp+var_42C]
.text:004E4915                 push    edx
.text:004E4916                 mov     eax, [ebp+var_480]
.text:004E491C                 push    eax
.text:004E491D                 mov     ecx, [ebp+var_254]
.text:004E4923                 push    ecx
.text:004E4924                 mov     edx, [ebp+var_248]
.text:004E492A                 push    edx
.text:004E492B                 call    sub_4D6450      ; 生成xor数
.text:004E4930 ; 848:     *(_BYTE *)(v318 + data) ^= v3;
.text:004E4930                 add     esp, 10h
.text:004E4933                 movzx   eax, al

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

收藏
免费 2
支持
分享
最新回复 (1)
雪    币: 3114
活跃值: (30886)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
感谢分享
2023-9-15 09:52
1
游客
登录 | 注册 方可回帖
返回
//