SMC的三种处理方法

[网鼎杯 2020 青龙组]jocker-CSDN博客

我们以这道题举例

9d5dbc9b8a684edcbfe719025d834a48.png

题目在

buuctf上

前面我就不说了,主要分享知识点

1656e78a03394e62863cdd34610da116.png

首先第一步肯定就是找到加密函数

1.动调(推荐)

e0348cd3e80648babf38e04bbdc9e45a.png

下断点在动调后

9b6cd60aeb184c53856c75c9195e4fe2.png

确保程序可以执行在这里!()()(重要)

b69f31486ef24438a723cd8a70026e69.png

来到汇编解密

可以看见开始是1500

然后for循环是187

地址选择就是1500-1500+hex(187)

95fab827f99446b4ba903e7fe85e48b3.png

其实到那个地方,有明显界限

按u重新转换为字节码

回到1500开头

按p进行编译

26509e592be5438682dadcc97f1805eb.png

成功!

8639c49a7dc34f4c809645ccc8dbec3c.png

 2.IDApython

跟上面一样,先锁定加密过程和加密地址

8e874333ebc748dfb2ca242084399709.png

观察加密逻辑

dc917f0a329c4d328ebf9d1d6ab12c14.png

简单的异或

shift+F2

打开IDApython

import idc
addr = 0x401500  # encrypt函数的地址
for i in range(187):
    b = get_bytes(addr + i, 1)
    idc.patch_byte(addr + i, ord(b) ^ 0x41)

固定写法,保存就是

7d6e891c6f474f15a88ad80062f5b542.png

在地址上重新UP一下

600fc67136c242699fef2b76173d766e.png

成功!

f1004220af6a4e2bab2f739391b27576.png

因为没有重新编译

所以动调也是可以很好看见

3.ollydug

把文件拖入Ollydug中

点击plugins-中文搜索引擎-智能搜索

aa4b1af2163f4c2885a3cd7a261b2690.png

找到当前字符串

同时我们可以打开IDA,观察

b46e86bc5d184267a8341f658473436b.png

因为IDA的汇编更清楚

我们找到SMC后

343d70edd9e148408a1079ec0175f483.png

在这里

然后在OD里面找到一样的位置

0976deb0da844095ac4a3124cf35ebab.png

实在不行,可以选择看地址

然后我们F2下断点

因为他会执行这个函数,所以我们断在下面的Call

然后单步F7步入

024d7782b1394cfdb9d5edec5703eb38.png

在这个界面点击plugins-od dump-第一个

6a9aa7d44fdd4f12abcf6c015b488e50.png

脱壳,

49d98c8b9a1f4b2f8819bd0550236057.png

得到一个exe文件

IDA打开

54a027ff0f154289a5349bb28f52c570.png

OK!

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

name_name123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值