逆向工程--失业的娱乐
前段时间在网上看了IAT Hook的文章,也正好期末提前放假,闲着想自己也想试一试,于是跟着网上的教程实现了汉化Windows系统自带的计算器。实现的话只应用到了dll注入和IAT Hook,实现起来也比较简单。
大概实现思路是:写一个dll,dll中钩取显示数字的目标API(usr32.SetWindowTextW),在执行该函数前,将缓冲区内的阿拉伯数字0~9改为汉字的零~九,然后将dll注入到目标进程,即可实现该功能。不再赘述,直接写出我的具体实现步骤:
一、写一个dll文件,dll文件会注入到目标进程(calc.exe进程)
这个dll文件的实现为:
- 搜索user32中原始SetWindowTextW函数地址
- 编写Detour函数,实现将数字0~9改为汉字零~九
- 遍历目标进程内存空间,定位到导入表。
通过OriginalFirstThunk遍历函数名称,找到目标函数,对应的FirstThunk的值为目标函数地址。
- 注入dll时,将detour函数地址替换原函数地址,保存原函数地址,卸载时恢复
二、将上述dll文件注入到calc.exe进程中
- 提升权限
- 遍历进程,找到calc.exe
- 将dll注入目标进程
三、测试结果
- 修改后函数被调用后的执行流程
- 按照上述步骤写出后编译即可,测试结果如下图,系统计算器中的数字输入已经被修改位汉字输入
- 测试系统版本为64位win7 7601。
兜兜转转已经从一个小孩马上成长为一个工作的大人了,自学计算机这六年迷茫过,焦虑过,失眠过,自卑过,爱过恨过。从一个从来不喝酒的人,到现在能喝点酒了。从一个技术小白,到现在依然是小白。从前总是很害羞,到现在还是那么的害羞。从前总是急于求成,最后一事无成。学习过嵌入式开发,学习过Reverse,学习过Web,最后工作发现自己学的都还只是冰山一角。以前总想着自由生活,现在实习了,一个人反而感觉有些不适应了。学了这么久的逆向,最后工作上的内容和逆向也没什么关联,还是有些心酸,逆向的相关工作岗位还是很少,这么多年的学习也算是娱乐了吧。总的来说还是自己的自己的知识面不够宽,还是应该多读书,多背书,多向身边优秀的人取经。
学习过程中还有很多不足,还望朋友们指正!