171027 逆向-Patch(CrackMe之041)(下)
来源:互联网 发布:php源码加密授权 编辑:程序博客网 时间:2024/06/09 14:06
1625-5 王子昂 总结《2017年10月27日》 【连续第392天总结】
A. CrackMe41–patch(下)
B.
上次说到把弹窗函数写好了,只等找到onClick加载的地方写入即可
然而找了半天都只发现这里:
用DeDe查了一下,02DC是Exit1的控件ID,02D8是About2的控件ID
从代码装载来看,似乎是整块整块(6字节+Name字符串)读入,而不是我想象的那样将事件地址存入结构体内存中对应的地方
另一方面,Exit1和About2的存储除了控件ID和字符串以外没有区别,这说明onClick事件不依靠控件的属性来装载,因此我只能在About2Click后再添加一个事件组;然而内存已经挤得满满的了,根本没有给我留位置(:з」∠)
于是只好放弃这个最原装的思路,转而决定hook事件判断:
最简单的识别就是通过控件ID,在调试过程中我发现这里:
call 00430488以后可以通过edx中存储的控件下标来获得结构体指针,进而判断是否执行事件
于是可以hook这里,通过判断edx是否为Exit1的ID从而决定弹窗或者写入函数地址
因为函数体已经写好,所以懒得完全hook
干脆当识别到Exit1的时候将onClick事件写入eax+0x80的地址,即onClick事件地址好了
代码如下:
本来想hook一次,即检测到edx=3以后就将hook的代码恢复的,但是运行过程中会报内存写入错误,应该是由于该位置内存没有开启可写属性。
如果需要写入代码段的内存,需要更改节区头中的可写属性。
改动太麻烦,干脆一直hook着咯~
代码的位置同样位于最后的大段00中
hook函数写好以后,就在刚才得到函数结构体指针的函数之后进行劫持,使用jmp 0043e51d即可令流程走向hook函数,另一方面5字节也不会干扰到正常的call
复制出来以后可以正常执行,静态patch完成
最后提一下:最后的大段00称之为NULL-Padding,是由于Alignment,即最小单位导致的。即虽然内存只花费一定量,但为了方便起见,要求取整,这个整的单位就是Alignment。
明天试一下dll注入,正好在书上刚学过,练习一下
C. 明日计划
dll注入
- 171027 逆向-Patch(CrackMe之041)(下)
- 171026 逆向-Patch(CrackMe之41)
- IDA Pro逆向实战之Crackme(简单篇)
- IDA Pro逆向实战之Crackme(简单篇)
- 170916 逆向-WHCTF(BabyRe/CrackMe)
- 170531 逆向-CrackMe之007
- 170601 逆向-CrackMe之008
- 170602 逆向-CrackMe之009
- 170604 逆向-CrackMe之013
- 170604 逆向-CrackMe之014
- 170606 逆向-CrackMe之015
- 170610 逆向-CrackMe之019
- 170613 逆向-CrackMe之023
- 170617 逆向-CrackMe之024
- 170619 逆向-CrackMe之033
- 170620 逆向-CrackMe之034
- 170621 逆向-CrackMe之027
- 170625 逆向-Crackme之010
- day1
- memblock memory type和reserve type region的添加
- StringBuffer StringBuilder
- 自动装箱与自动拆箱
- 2017-10-30
- 171027 逆向-Patch(CrackMe之041)(下)
- 大数据 以及数字格式化输出
- HTML基础 超链接基础1
- 【笔试卷】SHANGYOU
- 随机数
- Double Kings
- 机器学习推荐网站(持续更新)
- 选择排序法
- Webstorage特性