zoukankan      html  css  js  c++  java
  • 逆向工程核心原理——第八章

    第八章,书本带领我们在此破解一个crackme。

    在破解的时候,书本引出了一些新的概念,我们先对crackme进行破解,而书上补充的知识点,我们统一放在最后。

    我们先来破解这个crackme。

    首先是查看这个软件的流程:

    进入首页输入name和serial:

    不输入name点击check:

    点击about:

    输入name和serial后点击check:

    quit就直接退出。

    然后我们就可以根据所得到的信息检索字符串:

    然后我们向上翻动,就可以看到输入成功的字符串:

    所以我们就要往上查看关键跳和关键call:

    于是我们在地址00403332的地方找到了关键跳,在00403329处找到了关键call。

    我们看到比较函数前面将edx和eax压入栈,而edx和eax则是存放的ebp-0x44和ebp-0x34的地址。

    所以我们猜测,这里传递的就是假码和真码,所以我们在栈区看一看:

    ebp-0x44和ebp-0x34的地址分别是0018F41C和0018F42

    我们在栈区看到这一块区域:

    就发现了真码。

    在这里我们找到了真码,所以说真码生成的代码应该就在上面。

    然后我们接着向上找:

    在004031F0处找到了一个取字符函数和一个转化ascii码的函数:

    然后再将ascii码和0x64相加:

    最后再转化为unicoed的函数:

    *备注上将unicoed写错了

    最后再通过循环,把所有的name加密。

    所以serial的公式为:

    (ASCII码+0x64)转化为unicode

    现在crackme解决了,我们来看看书上提到的一个写知识点:

    1.不同的编写语言和编译器都有各自特有的函数,比如VB的msgBox();C语言的messageBoxA()。

    2.简介调用,是指不直接用call指令调用函数,而是使用jmp跳转到函数。

  • 相关阅读:
    Ⅰ.Spring的点点滴滴--序章
    Ⅶ.AngularJS的点点滴滴-- 事件
    Ⅵ.AngularJS的点点滴滴-- 指令
    vue路由跳转
    使用<a-select>时,placeholder不起作用
    动态配置生成echarts图表
    elementui resetFields()不起作用
    input输入框与button按钮之间存在空隙
    一个怂女婿的成长笔记【二十二】
    一个怂女婿的成长笔记【七】
  • 原文地址:https://www.cnblogs.com/lex-shoukaku/p/13284206.html
Copyright © 2011-2022 走看看