黑客风云——风云网络
设为首页 加入收藏 我要投稿 网站地图

您现在的位置: 黑客风云 >> 黑客文章 >> 黑客进阶 >> 软件破解 >> 正文
·完美空间提供500M免费AS04-10·企业安全之YY内网准入以04-09
·企业安全之意识与策略04-09·剑走偏锋:IIS漏洞利用04-09
·我来免费网提供100M免费04-09·1122mb.com提供20G超大免04-08
·映像劫持与反劫持技术04-07·让所有"暴力删除工具"无04-07
·入侵88red系统的详细过程04-07·Sql Injection脚本注入终04-07
·vbs+delphi 反弹后门生成04-07·飞讯网提供100MB免费PHP04-07
·突破SQL注入攻击时输入框04-04·结合内核和病毒技术的最04-04
·Real Player rmoc3260.d04-04·亿万网络今月最后为您提04-04
·php+mysql 5 sql inject04-03·Real Player rmoc3260.d04-03
·oblog文件下载漏洞04-03·免费啦提供1G-2G免费全能04-03
·完全解析网页后门和挂马04-02·一句话开3389(只测试过04-02
·萧萧免费空间网提供100M04-02·谷道免费空间网提供1G免04-01
·从本地入手解决双线路由03-31·sablog 1.6 多个跨站漏洞03-31
·富文本编辑器的跨站脚本03-31·Cookie注入是怎样产生的03-31
[推荐]软件破解新手进化篇
      ★★★★★

软件破解新手进化篇

文章整理发布:黑客风云 文章来源:www.05112.com 更新时间:2007-4-16 8:32:08

4.下面我们开始实战演习

虽然这只是一个简单的用S-Demo做的动画,但是看完了下面的文章你还是会收获很多,不相信,我晕,把简单的事情做到极限就成功了,呵呵

(1).爆破
这个很简单就不多讲了,运行程序,随便输入密码,确定,提示:“password wrong”,
用ollydbg载入这个动画,查找程序用到的字符串,找到password wrong,下个断点,还记得前面的理论吗?
再向前找找就可以找到比较的关键地方了(条件跳转),好的,找到的地址是:0040203F
0040202A  |. FFB6 A4000000  PUSH DWORD PTR DS:[ESI+A4]               ; /s2
下个断点,看看到底压入了堆栈什么
00402030  |. 8D45 CC        LEA EAX,DWORD PTR SS:[EBP-34]            ; |
00402033  |. 50             PUSH EAX                                 ; |s1
00402034  |. FF15 E0234100  CALL DWORD PTR DS:[<&MSVCRT._stricmp>]   ; \_stricmp    //这里看到了什么,stricmp,难道这就是传说中的关键比较吗?
但是比较之后没有跳转啊,是吗?仔细看看,比较之后的结果放在那里,eax !
下面不是有一个je吗?
0040203A  |. 83C4 20        ADD ESP,20  ;平衡堆栈
0040203D  |. 85C0           TEST EAX,EAX    ;测试返回值
0040203F  |. 74 15          JE SHORT test.00402056
修改为jne,保存,运行,ok,搞定,请你再次回顾前面的流程图

(2).寻寻觅觅找密码
还记得前面的流程图吗?如果我们在程序比较的时候中断程序会有什么发现呢?呵呵,这个时候会看到真正的密码,重新用ollydbg载入这个动画,下断点00402034
为什么要在这里下断点?好问题,因为这里看到了call DWORD PTR DS:[<&MSVCRT._stricmp>],看看流程图,明白了吗,呵呵
这里我们在堆栈区域可以看到我们输入试炼码和真正的密码,为什么在堆栈区域,因为在windows下通过堆栈传递参数。请看上面的简单分析,破解补丁的编写

(3).文件补丁的编写(c语言简单实现)
前面我们把je改成了jne,随便输入密码都可以了,实质是把机器码由74h改成75h,因为机器码和汇编指令是一一对应的,那么我们只要写个小东西,修改就可以了。我已经写好了,很短,很好懂。Crack.c,我们分析一下
#include <stdio.h>
#include <string.h>
int main(void)
{
  FILE *fp_out;  //要写入的文件
  printf("\n\t\t\t\t Copy Right by ngaut\n");
  printf("Cracking......\n");
//打开文件test.exe 
  if ((fp_out = fopen("test.exe", "r+"))==NULL)
  {                    
    printf("error!!!  Can not open test.exe!!!\n\n");
    printf("Press any key to continue\n");
    getchar();
    exit(0);
  }
//定位到要修改的地方,这里是 0x203f,为什么呢?下面给出回答
    fseek(fp_out, 0x203f, SEEK_SET);
    fputc(0x75, fp_out);        //写入数据0x75,也就是把机器码74改为75,
 //汇编则是 je 改为了jne 
    fclose(fp_out);

这里 0x203f = 0x0040203F – 0x00400000

(4).让程序自动弹出正确的密码

上一页  [1] [2] 

文章录入:cainiaowang    责任编辑:cainiaowang 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    VIP 专 区
    Copyright @2006 黑客风云 ●业务联系:QQ 联系怪人 联系奇人 Email:给怪人发邮件 给奇人发邮件
    ICP备案:冀06009886