zoukankan      html  css  js  c++  java
  • 逆向破解之160个CrackMe —— 001(中)

    CrackMe--001(中)

    前置知识介绍:

    • 160 CrackMe 是比较适合新手学习逆向破解的CrackMe的一个集合,一共160个待逆向破解的程序

    • CrackMe:一些公开给别人尝试破解的小程序,制作crackme的人可能是程序员,想测试一下自己的软件保护技术,也可能是一位cracker,想挑战一下其它cracker的破解实力,也可能是一些正在学习破解的人,自己编一些小程序给自己破。

    • CrackMe简称CM,cracker是以破解各种加密或有限制的商业软件为乐趣的人。

    程序信息:

    编号作者保护方式
    001 Acid burn Name/Serial,Serial

    工具:

    • ollyDbg(简称OD)

    • Exeinfo PE

    开始破解:

    1.今天完成第二个目标,只需要序列号的验证机制,打开上篇完成修改后的程序,没有了烦人的提示窗口,是不是心情也愉快的很多。接下来我们点击Serial按钮来到序列号验证窗口,随意输入一个序列号,然后点击验证按钮

    2.显然我们随意输入的序列号是正确的可能性是极低的,一般友好的程序会在你验证过后给用户一个提示,告诉用户序列号是否正确,果然,程序以窗口的形式给了用户提示,又是窗口,如果你还记得昨天的方法,你应该可以找到创建该窗口的关键代码(不妨试试)

    3.今天我们用一种新的方法,字符串定位法,上面验证错误后,会弹出一个窗口,显示Try Again(再来一次),我们用OD打开程序,右键->中文搜索引擎->智能搜索(这里需要插件,会在文末给大家),在弹出的界面中右键->查找,输入刚刚提示的信息Try Again,然后回车

     

    4.现在就会定位到输入的字符串那行(如果存在),按N或B键查找下一个,发现一共有三个,还行(如果太多,这个方法就不好用了),我们在三处都下断点(双击或按回车就会跳回到反汇编窗口并停留在选中的地址处,然后按F2键下断点),然后按程序运行,输入一个序列号,进行验证

    5.会发现程序停在0x42F4F8处,我们向上看,很容易就发现了关键跳转,同时发现了序列号正确的提示信息,所以只要0x42F4D5处的跳转指令不执行,验证就一定会通过,我们可以将jnz改为jmp,然后保存修改后的内容就行了,这样无论你输入什么都能正确(这就是爆破,可以参考上一篇试试)。

    6.但是我们今天要找到正确的序列号,jnz指令的上一条指令是call一个函数,也就是当函数返回值是1就会实现跳转,我们在call指令所在地址0x42F4D0下断点,然后F9运行程序,再次输入一个序列号(1234,方便观察),点击验证按钮,会断在0x42F4D0处,同时我们会发现函数两个参数一个是我们输入的序列号,另一个也是一串字符串,所以这个函数的功能可能是比较两个字符串,相同就返回0,不相同就返回1。经过测试,的确如此。那么Hello Dude!就是真正的序列号

    7.我们重新运行程序,输入序列号Hello Dude!,验证通过。

    8.第二个目标达成,明天完成最后一个目标

     

    OD中文搜索插件

    链接:https://pan.baidu.com/s/1uCs_1ImM7gvAmtBbe2g4vQ 

    提取码:hxz3 

    直面挫折,顽强生长
  • 相关阅读:
    MYsql增删改查
    粘包问题
    模拟ssh远程执行命令
    Socket抽象层
    基于TCP协议的socket套接字编程
    TCP协议的三次握手和四次挥手
    大话OSI七层协议
    网络架构及其演变过程
    互联网和互联网的组成
    Windows安装MySQL
  • 原文地址:https://www.cnblogs.com/ndyxb/p/12420061.html
Copyright © 2011-2022 走看看