博客网 >

软件破解(一)
作者:分类:默认分类标签:

    前一段时间一直在看一些关于加密的书,这两天突然心血来潮,想要写几篇关于软件破解的文章。先从最简单的破解说起吧,就是在破解那种在运行时要求输入验证码的那种软件。顺便说一下,我写的这些关于破解的文章都是在windows平台上,使用vc++.net编译器及其提供的部分实用工具,同时推荐使用十六进制编辑器hiew(6.86版)、调试器softice(4.0版)和反编译器ida(4.8版),这些软件在各大下载网站上都是很容易找到的,而且教程也很容易找到。
    这种软件的保护部分一般大概形式为:

#include <string>
#include <iostream>
using namespace std;
const char* pass="The Required Password";
void main()
{
 char* inputpass=new char[100];
 cout << "Please Enter The Password:" << endl;
 cin >> inputpass;
 if (!strcmp(pass, inputpass))
  cout << "Password Is Correct." << endl;
 else
  cout << "Wrong Password!" << endl;
}

    要破解这个保护程序,只需要找出密码,即是程序中的字符串“The Required Password”。只要使用vs.net提供的dumpbin工具就可以很方便的找出这个字符串。
    在vs.net命令提示下进入该程序所在的目录,输入命令:dumpbin sample.exe,就可以看到该可执行文件的所有段结构,如下:

File Type: EXECUTABLE IMAGE
  Summary
  3000 .data
  4000 .rdata
 10000 .text

    可以判断,程序的字符串应该是存放在.data(数据段)或者.rdata(服务RTL段)字段中的,再输入命令:dumpbin /rawdata:.bytes /section:.rdata >rdata.txt即可将程序的和服务RTL段分别保存到文件rdata.txt中,查看之,可以得到:

  00411110: 2B 00 00 00 B0 32 01 00 B0 32 01 00 54 68 65 20  +...°2..°2..The
  00411120: 52 65 71 75 69 72 65 64 20 50 61 73 73 77 6F 72  Required Passwor
  00411130: 64 00 00 00 43 00 00 00 62 61 64 20 63 61 73 74  d...C...bad cast
  00411140: 00 00 00 00 E0 14 40 00 80 43 40 00 60 42 40 00  ....à.@..C@.`B@.
  00411150: 40 41 40 00 30 39 40 00 10 38 40 00 F0 36 40 00  @A@.09@..8@.e6@.
  00411160: D0 35 40 00 B0 34 40 00 80 33 40 00 40 32 40 00  D5@.°4@..3@.@2@.
  00411170: 60 20 40 00 57 72 6F 6E 67 20 50 61 73 73 77 6F  ` @.Wrong Passwo
  00411180: 72 64 21 00 50 61 73 73 77 6F 72 64 20 49 73 20  rd!.Password Is
  00411190: 43 6F 72 72 65 63 74 2E 00 00 00 00 50 6C 65 61  Correct.....Plea
  004111A0: 73 65 20 45 6E 74 65 72 20 54 68 65 20 50 61 73  se Enter The Pas
  004111B0: 73 77 6F 72 64 3A 00 00 F0 29 40 00 D0 29 40 00  sword:..e)@.D)@.

    这样,就可以得到需要的密码字符串了。不过,在实际情况中,通常需要从众多的可能的密码中选择出正确密码,但这样一来所需要的工作量就已经大大的减少了,特别是当密码串中的部分已知时。或许有的人会说,只要在源程序中使用#pragma data_seg或者#pragma const_seg预处理指令就可以把任意的字符串放置到任意的代码段中。但是一定要知道,如果使用非默认字段,会很容易受到怀疑,而即使将字符串放到默认的其他字符段中,只要使用查找功能,便可以相对容易的寻找到可能的密码字符串。
    在这一讲中,我们主要讲解了如何从软件中定位某一特定的字符串,可以说是破解软件的入门课程。我要特别提到的一点是,在查看到的数据段中,要注意字符串的地址,就“The Required Passoword”而言,其地址为0x0041111C,因为在其后的更进一步的破解中,是经常需要这些地址的。大家好好练习一下查找特定字符串的方法,在下一讲中将讨论如何定位处理特定字符串的过程。

<< 计算机安全基础 / 关于逻辑异或加密的安全性 >>

专题推荐

不平凡的水果世界

不平凡的水果世界

平凡的水果世界,平凡中的不平凡。 今朝看水果是水果 ,看水果还是水果 ,看水果已不是水果。这境界,谁人可比?在不平凡的水果世界里,仁者见仁,智者见智。

中国春节的那些习俗

中国春节的那些习俗

正月是农历新年的开始,人们往往将它看作是新的一年年运好坏的兆示期。所以,过年的时候“禁忌”特别多。当然,各个地方的风俗习惯不一样,过年的禁忌也是不一样的。

评论
0/200
表情 验证码:

Romeo

  • 文章总数0
  • 画报总数0
  • 画报点击数0
  • 文章点击数0
个人排行
        博文分类
        日期归档