新人开源一个自己开发的DLL注入和汇编注入器(简单的讲解)

新人双11刚注册了帐号,来个新人贴冒一下泡,由于我写文章比较少,如果表达的不够清晰的话,大家可以留言哈,多多谅解,源码、成品以及例子都会放在末尾。这个工具是我之前学做游戏变(W)强(G)软件时开发的,功能基本满足需求,目前工具支持以下功能:

  • 进程信息查看
  • 进程挂起
  • 进程恢复
  • 进程模块查看
  • 进程模块卸载
  • DLL文件拖拉
  • DLL注入
  • 根据汇编代码生成OPCode(目前只支持x86)
  • 直接注入汇编代码

新人开源一个自己开发的DLL注入和汇编注入器(简单的讲解)

新人开源一个自己开发的DLL注入和汇编注入器(简单的讲解)

新人开源一个自己开发的DLL注入和汇编注入器(简单的讲解)

DLL注入大家应该都不陌生了,汇编注入下面会简单说一下用法。

第一我们有一个程序需要动态调试它的某些功能,又不想写DLL注入进去测试,这时候就可以使用到汇编注入了,我们可以直接写一段汇编实现我们想要的功能,

列如下面我会调用例子程序里面的函数:

第一,这个例子程序的代码特别简单

新人开源一个自己开发的DLL注入和汇编注入器(简单的讲解)

这个例子程序在内存中的样子是这样的:

新人开源一个自己开发的DLL注入和汇编注入器(简单的讲解)

main函数里面的逻辑就是一个初始化callTips字符串,还有就两个call
第一个call就是调用输出

call print!

的doPrint函数,这个函数在例子程序内存中的地址是

0x00AB1000


第二个call就是调用getchar函数,这个函数的作用是等待输入一个字符,主要用来暂停例子程序不退出

新人开源一个自己开发的DLL注入和汇编注入器(简单的讲解)

doPrint函数里面也有一个call,这个是调用了C语言系统库的

printf

函数输出”call print!”

然后我们记录一下关键地址:
1、doPrint函数地址是

0x00AB1000

2、printf函数地址是

0x00AB10A0

3、”call print!”地址是

0xAB20F0

4、”other call!”地址是

0x00AB2100

等下我们主要调用一次doPrint函数和printf函数输出隐藏的”other call!”字符串作为例子
默认运行例子程序是这样的

新人开源一个自己开发的DLL注入和汇编注入器(简单的讲解)

我们来写汇编注入再调用一次doPrint函数
代码大致是这样的:

mov eax,0x00AB1000
call eax
ret

新人开源一个自己开发的DLL注入和汇编注入器(简单的讲解)

注入后执行成功了
下面我们来想办法输出隐藏的”other call!”字符串,由于在原程序中我们doPrint函数有一个输出”call print!”的地方,所以我们把这段代码拿过来,把字符串换成隐藏字符串就行了

push ebp
mov ebp,esp
mov eax,0x00AB10A0
push 0x00AB2100
call eax
add esp,4
pop ebp
ret

新人开源一个自己开发的DLL注入和汇编注入器(简单的讲解)

成功,”other call!”字符串被输出了,实则这种找call后换成我们想要的参数就是WG中常常用到的

最后,感谢大家看完这篇帖子,虽然都是很基础的东西,但是研究一下也是很有趣的!

解压密码:

源码地址: https://github.com/zhaobisheng/BInject
缺的库文件可以从我的压缩包里面找

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 共33条

请登录后发表评论