57.逆向破解分析实战24:160crackme之005(08):番外机器码校验分析-汇编语言社区论坛-技术社区-学技术网

57.逆向破解分析实战24:160crackme之005(08):番外机器码校验分析

分析*(a1 + 0x30C)

首先看一下赋值的位置

图片[1]-57.逆向破解分析实战24:160crackme之005(08):番外机器码校验分析-汇编语言社区论坛-技术社区-学技术网

核心位置的代码分别为获取用户名计算用户名的长度

看似是和 0x30C 是无关紧要的

图片[2]-57.逆向破解分析实战24:160crackme之005(08):番外机器码校验分析-汇编语言社区论坛-技术社区-学技术网

图片[3]-57.逆向破解分析实战24:160crackme之005(08):番外机器码校验分析-汇编语言社区论坛-技术社区-学技术网

Sysutils::DiskFree(0)

SysUtils::DiskFree(0) 是 Delphi(Object Pascal)或 C++ Builder 中用于获取磁盘剩余空间的一个函数调用

__int64 freeBytes = SysUtils::DiskFree(0);
  • DiskFree() 是一个来自 SysUtils 单元的函数。
  • 参数 0 表示获取当前驱动器(即程序运行所在的磁盘分区,例如 C:)的剩余可用空间。
  • 返回值类型:__int64(在较新版本中),表示以字节为单位的剩余可用空间。

图片[4]-57.逆向破解分析实战24:160crackme之005(08):番外机器码校验分析-汇编语言社区论坛-技术社区-学技术网

图片[5]-57.逆向破解分析实战24:160crackme之005(08):番外机器码校验分析-汇编语言社区论坛-技术社区-学技术网

下断分析Sysutils::DiskFree

由于返回的是 64 位的数据,所以保存格式为edx:eax(64 位整数)

图片[6]-57.逆向破解分析实战24:160crackme之005(08):番外机器码校验分析-汇编语言社区论坛-技术社区-学技术网

所以磁盘所剩空间是:edx:eax0x0EB25A8000 == 63121817600

也就是≈ 58.8 GB(字节)

图片[7]-57.逆向破解分析实战24:160crackme之005(08):番外机器码校验分析-汇编语言社区论坛-技术社区-学技术网

一、基础单位换算

  • 1 KB = 1024 字节
  • 1 MB = 1024 KB = 1,048,576 字节
  • 1 GB = 1024 MB = 1,073,741,824 字节

二、将字节数换成 GB

现在有的字节数是:63,121,817,600 字节

换算为 GB:

63,121,817,600 ÷ 1,073,741,824 ≈ 58.8 GB

磁盘数据加密运算过程

4.修复_LLMOD 函数

分析TForm1_FormMouseMove校验

  1. v6 = 1;
  2. v7 = (v6 == 0); // 注意括号,优先级问题
  • == 的优先级高于 =
  • 所以会先判断 v6 == 0,结果是 false(0)
  • 然后把结果 0 赋值给 v7
  1. v8 = 1 - 1 = 0
  2. 所以最终*(a1 + 0x314) = 0x3D;将会被执行,0x3D = 61

图片[8]-57.逆向破解分析实战24:160crackme之005(08):番外机器码校验分析-汇编语言社区论坛-技术社区-学技术网

感想大家收看~

请登录后发表评论

    没有回复内容