首页
社区
课程
招聘
[原创] KCTF 2021 Spr. 第一题 SMC
2021-5-11 11:54 2760

[原创] KCTF 2021 Spr. 第一题 SMC

HHHso 活跃值
22
2021-5-11 11:54
2760


【0x100】望

    (下载、)解压、运行:如下,可得到信息:10KB 轻量级 console 样例。

    

【0x200】切

    直接放进IDA分析,如下

    工具环境:IDA Pro 7.5 witt Python 3.8

    反汇编自动定位在_main主函数处,初步信息:

    (1)_main 函数不能构成(Create Function)完整函数;

    (2)根据编程经验可以猜定 0x4014F0、0x4014A0分别为printf和scanf;

【0x210】

    目前为止,基于没有人为干预影响到IDA的自动化分析过程;无法创建完整函数可以料想有非常规代码存在(其他如芯片指令类型错误在此种情形下几乎不可能);往下观察,可见非指令代码,可以确信有自修改代码;而自修改函数猜定为0x401470(smc)函数。

如下,从0x401470函数的业务逻辑,可以基本确定为修改函数,重命名为Hi_smc

从Hi_smc函数参数使用情况(ecx,edx,stack)可以确定使用__fastcall调用协定,可以在0x401470函数首地址处,快捷键【Y】重定义函数原型为




__fastcall 调用协定,参考:https://docs.microsoft.com/en-us/cpp/cpp/fastcall?view=msvc-160


【0x220】

    Hi_smc参数如下,buf=0x401266,size=0x40145A-0x401266,x=1

    通过在IDAPython中执行Hi_smc相同逻辑实现代码修改,

import ida_bytes
for ea in range(0x401266,0x401458+2,4):
  ida_bytes.patch_dword(ea,ida_bytes.get_original_dword(ea)^1)

    结果如下,从printf和“Try agian!\n"可以确定已经完成smc自修改,但部分指令需要手动强制下反编译分析,

    如在0x401287处,通过快捷键【C】强制反编译分析

如下,完成_main函数所有smc代码及其影响的代码反编译后,通过在_main函数首地址处右键【Create Function】建立函数,这时可以通过F5观察伪码。

【0x230】

    _main伪码如下左图,稍作修改为右图,可见,输入key长度为12,格式要求为:flag{******}

左图到右图小改方法:

(1)Arglist重命名为lv_key,定位到Arglist,快捷键【N】;

(2)lv_key定义为char lv_key[0x100],定位到lv_key,快捷键【Y】;

(3)在102等整数处右键选择Char或快捷键【R】)


【0x240】

    在_main后续业务逻辑中,key经过了0x401050函数的变换,变换结果需要为"ZmxhZ3trYW54dWV9"

    对0x401050函数略看一眼,并没能确定什么有效变换信息(除非不经意浏览到函数内的“=”号,这里我们忽略)。

    我们先看下0x401000函数,业务逻辑毕竟简单,完成全局变量0x404380的初始化,初始化常量为0x403188存放内容。

在0x403188处,如下,我们看到敏感字符信息,有点像是base64。

我们尝试下base64解密"ZmxhZ3trYW54dWV9",如下

import base64
base64.b64decode("ZmxhZ3trYW54dWV9")

至此,我们可以自信点,把上面”有点像是base64“的”有点像“去掉。

flag{kanxue}就是我们要提交的key

0x401000函数原义为base64_init函数

而函数 0x401050为base64编码函数


【0x300】

    Less is more.



[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
点赞0
打赏
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回