【文章标题】: 给程序添加网络验证和启动广告的功能
【文章作者】: fyc132
【作者邮箱】: 286751251@qq.com
【作者QQ号】: 286751251
【软件名称】: 北斗壳
【下载地址】: 自己搜索下载
【加壳方式】: 北斗壳
【保护方式】: 北斗壳
【编写语言】: Microsoft Visual C++ 6.0
【使用工具】: lordpe,od,zeroadd,
【操作平台】: Xp + Sp3
【软件介绍】: 一款压缩壳
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
已经是凌晨2点了,而我却毫无困意。无聊着敲着键盘,所以随便找了个软件下手。为这个程序添加上我们的后门!有了这
个后门,你就可以控制别人使用你的软件,还有启动的广告(可以赚钱啊!(*^__^*) 嘻嘻……)!
好,言归正传!我们今天的目标就是北斗壳这款软件,我们要给他添加上我们自己写的代码!
No.1 为程序添加所需API函数
我们要添加的API函数有5个
1. InternetOpenA 开始一个连接
2. InternetOpenUrlA 开始一个网站连接
wininet.dll 3. InternetReadFile 读取网页的内容
4. InternetCloseHandle 关闭一个连接
kernel32.dll 5. lstrcmp 字符串比较
用lorde打开北斗 ,打开Diectories 然后点击那个Import Table 那排的第一个按钮.打开之后,随便点一个DLL,然后点右键
点Add import,接着在DLL中写上wininet.dll,kernel32.dll在API中依次添加上InternetOpenA ,InternetOpenUrlA ,InternetReadFile 和
nternetCloseHandle然后保存,关闭lordpe.
No.2 添加区段
因为我们写的代码量太大了,所以必去得添加一个区段来写我们的代码.打开zeroadd,给程序添加一个大小1000的区块.关闭
zeroadd.
No.3 开始写代码
终于到了关键的一部了,我们开始写代码,首先用OD载入程序,ALT+M键打开内存窗口,查看我们添加的区块的地址是多少
实例中是0068c000,接着我们按CTRL+G键输入刚才我们找到的地址。开始写我们的代码。在写代码之前,我们得先构造几个字符串
"MyAgrent","http://XXXXXXX.com/user.htm(网页地址)","strat(要比较的字符串)" 不含双引号
我把汇编代码写在这里
0068C11A 6A 00 push 0
0068C11C 6A 00 push 0
0068C11E 6A 00 push 0
0068C120 6A 00 push 0
0068C122 68 00C06800 push 0068C000 ; ASCII "MyAgrent"
0068C127 FF15 58D06800 call dword ptr [<&wininet.InternetOpe>; wininet.InternetOpenA
0068C12D A3 80C06800 mov dword ptr [68C080], eax
0068C132 85C0 test eax, eax
0068C134 74 6F je short 0068C1A5
0068C136 6A 00 push 0
0068C138 68 00000080 push 80000000 端口
0068C13D 6A 00 push 0
0068C13F 6A 00 push 0
0068C141 68 10C06800 push 0068C010 ; ASCII "http://rjadmin.313414.cn/login.htm"
0068C146 FF35 80C06800 push dword ptr [68C080] 连接地址
0068C14C FF15 5CD06800 call dword ptr [<&wininet.InternetOpe>; wininet.InternetOpenUrlA
0068C152 A3 90C06800 mov dword ptr [68C090], eax 连接压入EAX
0068C157 85C0 test eax, eax
0068C159 74 4A je short 0068C1A5
0068C15B 68 95C06800 push 0068C095 ???
0068C160 68 FF000000 push 0FF 字符长度
0068C165 68 A0C06800 push 0068C0A0 缓冲区
0068C16A FF35 90C06800 push dword ptr [68C090] 连接地址
0068C170 FF15 60D06800 call dword ptr [<&wininet.InternetRea>; wininet.InternetReadFile
0068C176 FF35 90C06800 push dword ptr [68C090]连接地址
0068C17C FF15 64D06800 call dword ptr [<&wininet.InternetClo>; wininet.InternetCloseHandle
0068C182 FF35 80C06800 push dword ptr [68C080]连接地址
0068C188 FF15 64D06800 call dword ptr [<&wininet.InternetClo>; wininet.InternetCloseHandle
0068C18E 68 A0C06800 push 0068C0A0
0068C193 68 40C06800 push 0068C040 (比较的字符 ) ; ASCII "strat"
0068C198 FF15 84D06800 call dword ptr [<&kernel32.lstrcmpA>] ; kernel32.lstrcmpA
0068C19E 75 05 jnz short 0068C1A5
0068C1A0 - E9 0750E0FF jmp 原来的CALL
0068C1A5 6A 00 push 0
0068C1A7 68 50C06800 push 0068C050
0068C1AC 68 60C06800 push 0068C060 (修改这里) ; ASCII "管理员关闭了使用!"
0068C1B1 6A 00 push 0
0068C1B3 FF15 44644A00 call dword ptr [<&user32.MessageBoxA>>; USER32.MessageBoxA
0068C1B9 6A 00 push 0
0068C1BB FF15 50614A00 call dword ptr [<&kernel32.ExitProces>; kernel32.ExitProcess
Ctrl+n打开函数列表,查看每个函数的地址,然后把地址给替换掉
里面的函数都可以用call [函数地址]来调用,大家根据实际修改下字符串的地址,还有68C080,68C090都必须为一个空的地址
代码写完之后,保存起来。
No.4 载入代码
保存完之后,我们发现如果单纯的把0068C136设为入口点的话,程序会出现错误,那该怎么办那?我们停在原来的入口点
F8一直走,当我们走到这里的时候00485DA3 ,程序就运行了起来,很显然,这里就是主程序的处理CALL ,我们只要把这个CALL
修改成我们的地址,然后在把原来的地址给复制下去
0068C1A0 - E9 0750E0FF jmp 原来的CALL
保存代码,就可以了.
No.5
实际代码量很大,其实不用这么麻烦.我把我做好的代码全部保存到一个区段里,如果要给别人的程序添加这么功能,就可以
了。
No.6 改造
想让程序提示的错误框的内容是网页的内容,只要让程序把获取到的网页内容用对户框显示出来就可以了只要把0068C1AC 68 60C06800 push 0068C060 改为push 0068C0A0
就可以了
--------------------------------------------------------------------------------
【经验总结】
如果那个网页的内容不等于strat的话,就会弹出一个对话框,你就可以控制别人的使用了.很有趣吧.
其实只要搞懂了每个API函数的意思和PE的结构,DIY真的不难。当然,我也是菜鸟!
我还做了个教程
看不懂文章的可以看视屏
但是这样也有BUG,比如系统没联网,就会弹出个没有内容的对话框
这样,我们只需要0068C134 74 6F je short 0068C1A5
改为 je short 0068C1B9,把0068C159 /74 5E je short 0068C1A5
改为je short 0068C1B9就可以,如果没有联网,就直接退出了
为了防止别人破解,建议用VM处理下!
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!
2008年11月05日 上午 10:26:11
附件太大了,大家下载网页,下载完后,把.htm改为.rar就可以打开了
http://rjadmin.313414.cn/gongju.htm
[课程]Linux pwn 探索篇!