自己写的一个汇编写远程控制服务端源码,学习了不少东西,分享下
白吃 2014-01-17 10:23:07 学习之路无尽头, 学习之中求朋友,我想以此抛个砖,望求一些志同道合的朋友
为什么选择写个远程序控制软件呢?
因为这涉及的知识面比较广(如果服务端很多,怎么去写一个能承受的服务器,或者说有什么办法可以通过web来管理这些机器),我想这应该可以成为一个项目,而且可以用来实践各种技术
我打算能认识几个朋友,把源码放到github或者oschina上,大家一起玩。
还有就是建个群,对于提交源码和对此感兴趣的朋友可在群里一起讨论。如觉得可行的可以加我。加我注明来自CSDN。
简单说下源码:
1.无导入表
通过函数的Hash值来调用函数
2.采用了简单的补丁
就是将代码段设为可写,将原来通过函数Hash寻找函数地址来调用函数的方式,改变成直接调用函数地址的形式,当再次执行到这段代码的时候省去了重新寻找函数地址的麻烦
主要是通过代码里自己实现的_invoke函数来实现.具体见源码里的.imports.inc说明
;举个StdCall的例子,如果是C call处理办法类似(如ntdll.dll里的 memcpy等就是C call的调用方式)
代码:
push '23'
push '_2sw'
invoke _invoke, 1, __LoadLibraryA, esp
patch前:
代码:
Address Hex dump Command Comments
004019AA |. 68 33320000 PUSH 3233
004019AF |. 68 7773325F PUSH 5F327377
004019B4 |. 54 PUSH ESP
004019B5 |. 68 3274910C PUSH 0C917432 ; /nProcHash = 210859058.
004019BA |. 6A 01 PUSH 1 ; |argc = 1
004019BC |. E8 BE020000 CALL _invoke ; \_invoke
patch后
代码:
Address Hex dump Command Comments
004019AA |. 68 33320000 PUSH 3233
004019AF |. 68 7773325F PUSH 5F327377
004019B4 |. 54 PUSH ESP
004019B5 |. B8 7B1D807C MOV EAX,7C801D7B ; /nProcHash => 210859058.
004019BA |. FFD0 CALL EAX ; |argc => 1
004019BC |. 83EC 0C SUB ESP,0C ; \_invoke
004019BF |? 90 NOP
004019C0 |? 90 NOP
004019C1 |. 83C4 0C ADD ESP,0C
3.只实现了一个cmd shell的功能, 更多的请看源码吧。