RE套路/从EASYHOOK学inline hook
本文通过攻防世界Reverse答题进阶区的一道EASYHOOK,大致了解一下inline hook的流程。
P.S. 查了一下wp大多是直接动态调试看的= =,感觉并不能很深刻地理解hook。看流程其实有两个方法,除了动态识别流程以外,还可以静态分析流程(虽然比较麻烦但能更容易理解?实战的时候还是直接动调吧)。
P.S.S. 本文并非wp,只是记录关键hook部分罢了。
例题:EASYHOOK
环境及工具:win10 + IDA pro
IDA打开,查看主函数流程。
(这里sub_401370可以猜测是输出函数,改名为itsPrint)。
流程大致是:判断输入字符串Buffer长度是否为19,然后走sub_401220(),一路走下来,最后要令NumberOfBytesWritten==1,那么输入就是flag。
一般静态看的话很容易忽略前面的处理函数直接去看sub_401240(),然后发现一无所获(sub_401240()是个烟雾弹函数hhh)。
回头,从sub_401220()看起,发现另有乾坤。
我们可以关注到这个dword_40C9C4和lpAddress
实际上是用来存储WriteFile()的地址,就是即将被hook的函数地址(主函数中这个函数在烟雾弹函数sub_401240()前面一行)。
然后看到下面
-23转成十六进制是0xE9,敏感地注意到这个为jmp的机器码。
而dword_40C9BD的计算方式跟jmp偏移地址的计算方式十分类似。
即偏移地址=目标地址-当前地址-5。(5为E9 xxxxxxxx这条指令的长度)
同时!这两个关键变量在内存上还是连续的!
这说明这里很有可能存放着用来hook的跳板指令,用于跳转到sub_401080()。
我们将这里改成aHook1和aHook2。
继续往下走,是return语句调用的sub_4010D0()函数。
在这里我们可以看到,对lpAddress所存储的地址处进行了5字节的权限修改操作,先改成读写再往此处写入以aHook1开头的5个字节(即上面的跳板指令),最后恢复权限,完成修改。
现在程序流程就很明朗了,粗略来看程序流程是CreateFileA->(lpAddress里存的指令)WriteFile->sub_401240,但是在经过sub_401220()的处理以后,变成了CreateFileA->(lpAddress里存的指令)sub_401080->sub_401240。
所以!真正的加密函数,其实是——sub_401080()!
于是exp就可以写出来啦
dst=[0x61, 0x6A, 0x79, 0x67, 0x6B, 0x46, 0x6D, 0x2E, 0x7F, 0x5F, 0x7E, 0x2D, 0x53, 0x56, 0x7B, 0x38, 0x6D, 0x4C, 0x6E] flag=list("-------------------") flag[-1]=chr(dst[18]^0x13) for i in range(17,-1,-1): tmp=dst[i]^i if i%2==1: flag[i]=chr(tmp+i) else: flag[i+2]=chr(tmp) print(''.join(flag))
只看加密函数的话第一位其实是被丢失了的(。),可能是在哪里有保存吧没看到,不过很容易猜到是'f'啦。
- LeetCode Reorder List
- 143 Reorder List
- ExtJS 5.1 TabReorderer plugin
- 转:hibernate删除时的异常 deleted object would be re-saved by cascade (remove deleted ob
- re正则表达式7_{}
- 【RefactoringCode】The description of the refactoring book
- Python中的re模块(一)
- 143. Reorder List LeetCode
- Linux Shell常用技巧(一) RE
- SparkR运行时错误:Re-using existing Spark Context. Please stop SparkR with sparkR.stop() or restart R to c
- Lock file left by a different patch, OPatch will not try re-using the lock file.
- UVALive - 6832 Bit String Reordering (找规律)
- Reorder List
- python的正则表达式re模板
- hdu4710 Balls Rearrangement(数学公式+取模)
- 利用 REAgentC 实现快速的系统恢复
- 小白笔记0:re正则表达式
- 这是HR筛选简历的套路!
- 再分析Reanalysis和诊断模型Diagnostic Model定义
- Exception android.content.res.Resources$NotFoundException: File res/drawable/my.xml from drawable re