本帖最后由 whklhh 于 2017-10-11 22:33 编辑
Reversing.kr是韩国的一个逆向题目网站
有分国度的排行榜,还是挺有意思的
本题即来自于第十六关HateIntel
http://reversing.kr/challenge.php可以下载到文件
HateIntel
这个标题真刺激……
看起来是mac平台的,只能直接IDA反编译啦╮(╯_╰)╭
ARM平台的反汇编没有接触过,直接F5
IDA大法好(°∀°)ノ
从start函数向后找,在这里发现了关键部分
很明显,接收输入后通过sub_232c进行处理,然后循环比较input和byte_3004
这里input玩了一个小花招,vars0取地址-0x5c
实际上就是Input的地址,刚开始还没反应过来vars0是啥
那么关键就在于sub_232c里做啥了呢?
逐字符循环,每人四次……
又调用了一个函数sub_2494来处理字符,藏得真深啊
这个函数的a2参数给的一直都是1,所以函数内的循环并没有得到使用……
循环体先*2,再根据bin第9位来对bin第一位赋值
嗯?这个操作有点眼熟啊
不就是rol(v3, 1)吗
先左移一位,然后将溢出第一比特的位(第9位)的值赋给第一位
也就是循环左移操作呀,那么我们根据目标值进行循环右移4位不就行了么
目标值复制,IDC dump出来都可以
脚本:
[Python] 纯文本查看 复制代码 n = [68, 246, 245, 87, 245, 198, 150, 182, 86, 245, 20, 37, 212, 245, 150, 230, 55, 71, 39, 87, 54, 71, 150, 3, 230, 243, 163, 146]
for i in n:
for j in range(4):
p = i & 1
i = (i >> 1) + p*(0x100>>1)
print(chr(i),end='')
Do_u_like_ARM_instructi0n?:)
No, I don’t.(╯‵□′)╯︵┻━┻ |