首页
社区
课程
招聘
[原创]给程序添加网络验证和启动广告的功能
发表于: 2008-11-5 02:47 38175

[原创]给程序添加网络验证和启动广告的功能

2008-11-5 02:47
38175
【文章标题】: 给程序添加网络验证和启动广告的功能
【文章作者】: 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 探索篇!

收藏
免费 7
支持
分享
最新回复 (86)
雪    币: 1564
活跃值: (3572)
能力值: ( LV13,RANK:420 )
在线值:
发帖
回帖
粉丝
2
第一次写文章,写得不好的大家指出来
2008-11-5 02:55
0
雪    币: 251
活跃值: (25)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
3
学习ing
2008-11-5 10:19
0
雪    币: 1564
活跃值: (3572)
能力值: ( LV13,RANK:420 )
在线值:
发帖
回帖
粉丝
4
给个精华哦 (*^__^*) 嘻嘻……
2008-11-5 11:37
0
雪    币: 1564
活跃值: (3572)
能力值: ( LV13,RANK:420 )
在线值:
发帖
回帖
粉丝
5
咋没人回复我呢,刚刚我又改进了文章啊
2008-11-5 17:36
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
谢谢了,希望能写多点diy pe的文章 ,因为好想学这方面的.
2008-11-5 18:16
0
雪    币: 207
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
这样做,的确牛,谢谢,分享你的成果,请问这样能不能修改QQ,让它显示广告
2008-11-5 18:57
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
好东西,弄一堆软件,全加上我们的广告,到时候就发了啊
2008-11-5 19:28
0
雪    币: 182
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
还有视频。不错,学习下。
2008-11-5 19:47
0
雪    币: 1564
活跃值: (3572)
能力值: ( LV13,RANK:420 )
在线值:
发帖
回帖
粉丝
10
为什么我的文章没精华呢!:-(

╭︿︿︿╮
{/ #  # /}
( (oo) )
  ︶︶︶
2008-11-5 20:54
0
雪    币: 251
活跃值: (25)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
11
一个猜测:版主去参加安全烽会了
2008-11-5 21:14
0
雪    币: 1564
活跃值: (3572)
能力值: ( LV13,RANK:420 )
在线值:
发帖
回帖
粉丝
12
(ˉ(∞)ˉ)
太远了,不然我就去了,呵呵
2008-11-5 21:17
0
雪    币: 251
活跃值: (25)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
13
刚才在http://bbs.pediy.com/showthread.php?t=76062&page=3 看到美食的图片
2008-11-5 21:31
0
雪    币: 1564
活跃值: (3572)
能力值: ( LV13,RANK:420 )
在线值:
发帖
回帖
粉丝
14
我想要个精华帖!

~~~~(>_<)~~~~
2008-11-5 21:53
0
雪    币: 232
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
顶,很不错,谢谢楼主分享精神。
2008-11-5 23:57
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
看不懂```
2008-11-6 01:01
0
雪    币: 1564
活跃值: (3572)
能力值: ( LV13,RANK:420 )
在线值:
发帖
回帖
粉丝
17
谢谢版主加了精华,(*^__^*) 嘻嘻……
2008-11-6 11:06
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
很值得学习
建议加精
2008-11-6 11:59
0
雪    币: 200
活跃值: (46)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
不错,马上仿效。
2008-11-6 16:16
0
雪    币: 200
活跃值: (46)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
这个做法很容易搞出本地验证哦。。。。
2008-11-6 16:22
0
雪    币: 200
活跃值: (46)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
可以如此改造:

前提:如果是做服务程序,公网IP和CPU ID固定

WEB端程序获取客户IP,经过一个自己的算法以后返回一串序列号

客户端增加一个注册程序,注册码暂定为CPU ID经过一个本地算法置换结果吧。

客户把这个注册码和公网IP发给作者,作者计算好验证码文件交给客户

程序主体里首先GET WEB获取到自己的序列号,然后通过与CPU ID和验证码文件的效验来决定是否授权。

哈哈,这个会不会太复杂。

楼主这样的应用程序也可以加一个注册用户名,在GET WEB的时候把注册用户名发送出去。
这样,远程验证结合本地验证,如果不是算法被破解,应该没办法了吧?
2008-11-6 16:28
0
雪    币: 1564
活跃值: (3572)
能力值: ( LV13,RANK:420 )
在线值:
发帖
回帖
粉丝
22
谢谢楼上的,有时间改造下,(*^__^*) 嘻嘻……
2008-11-6 17:58
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
不错是不错  这样好像有点不地道啊
2008-11-7 23:40
0
雪    币: 7906
活跃值: (3086)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
很不错的帖子,我收藏+以后关注你了,多写点这样的DIY文章出来咯。。。。

PS:我这没下载工具,下你这视频头疼啊
2008-11-8 00:01
0
雪    币: 7906
活跃值: (3086)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
下不了了,楼主你找个网盘传传吧,先说好别放  rayfile 啊,那里刷不开的,永硕的也是开不了的
2008-11-8 00:03
0
游客
登录 | 注册 方可回帖
返回
//