zoukankan      html  css  js  c++  java
  • 课上实验-小软件破解

    二进制代码分析报告(好水的一个破解)

      第一步,language.exe检测出程序加壳,经过Aspack加壳。

      第二步,AspackDie.exe脱壳

      第三步,language.exe检测脱壳后的程序,发现该程序是使用Delphi编写的。

      第四步,将脱壳程序拉入IDA,通过ViewsàStrings查看字符串信息,发现“注册码错误”字符串,定位到代码处。如下图:

      在0x004ACAD7处有两个分支,经观察0x004ACADD的分支为注册成功的分支,0x004ACC3D的分支为注册失败的分支。因此,为了注册成功,我将0x004ACAD7处的jnz改为jz,这样随便输入注册信息后,将跳转到0x004ACADD分支,即注册成功。对jnz的修改可以利用Ollydbg进行修改。效果如图:

             然而,当我关闭程序重新打开时,提示页仍然存在,程序仍是未注册状态(如下图),我意识到在程序启动时还有验证注册信息的代码段。 

             利用IDA和OllyDbg,我从程序的入口点开始分析。

             程序首先利用GetPrivateProfileStringA从user.dat中取出用户注册的信息,包括用户名和序列号。如下图: 

             接下来,对用户的注册信息进行了分析,这些分析过程就应该是验证注册信息是否正确的,从而根据判断结果来确定是否注册。

             从IDA的反汇编窗口来看,总共有三处地方对注册信息进行了验证。如下图:

             前两处:

             第三处:

             在利用OllyDbg进行调试的时候,发现前两次判断都能通过,在进行第三步判断时,没能通过。因此,我将0x004AD5C5处的jnz改为了jz,这样,成功通过三次判断,因此注册验证通过,将不会显示提示页面,同时注册成功。

             效果如图: 

    附:

             我也尝试着去找到真正的注册码,并且成功找到,过程如下。

     

             从图中,左分支为注册成功的分支,右分支为注册失败的分支。注册成功与否关键看0x004ACAD2处 call sub_404b04的返回值,我断定这个函数应该是验证注册成功的关键函数。如果sub_4-4b04返回非零,则注册码错误。在IDA中分析sub_404b04函数,发现该函数接受了两个参数,分别是eax和edx(Delphi的传参规则是前三个参数依次传入eax, edx, ecx寄存器)。在sub_404b04中首先比较了两个参数是否相同,如果不相同,直接返回第一个参数(也就是非0),所以首先应该保证的是这两个参数相同。

         在OllyDbg中,我在此函数下断点,并尝试输入注册信息,点击注册按钮时,触发断点。这个时候,观察eax和edx,我发现edx为我输入的注册码,而eax为带比较的参数,因此,我可以断定正确的注册码就是eax所指向的内容。如下图:  

             因此,用户名为”wah”的正确注册码是”2EA4B10”。经过验证确实正确,如图:

     

  • 相关阅读:
    Maven打jar包
    windows关闭占用某端口的进程
    windows系统下发布python模块到pypi
    【转】vmware 安装 osx 无法登录 appstore 的解决办法 (伪造smbios设备信息)
    【转】Java并发编程:volatile关键字解析
    自定义JSP标签
    不一样的ssm
    eclipse制作exe文件
    ftp服务器搭建及简单操作
    OC中的socket通信
  • 原文地址:https://www.cnblogs.com/wangaohui/p/4463033.html
Copyright © 2011-2022 走看看