逆向破解:CreakeMe-02
0x 01 环境准备
吾爱破解虚拟机、OD、PEID、汇编金手指
0x 02 程序运行
程序运行方式
首先打开程序,查看程序各个功能如下,如下:
该窗口输入name和key,进行校验,错误会弹出窗口提示
0x 03程序分析
找到算法入口点:
打开程序,中文搜索引擎,智能搜索出相关字符串
栈回溯方法
OD加载程序,直接运行
F12停止程序,查看K(调用堆栈),并不是c或c++编写,经过排查可以发现msvbvm50.rtcMsgBox这个函数可能是此程序窗口调用。
右键show call(显示调用)可以定位到程序空间,向上翻动可以看到关键词。
那么基本就可以定位到关键处,经过查看找到爆破点以及此段入口点:
在算法入口点处单步进行分析
到这里就可以看到输入的字符串,下一个vbaLenBstr是VB编程中获得字符串长度的函数,最后将结果存在eax中,
到这里可以看到rtcAnsiValueBster函数,这是获取输入字符串的第一个字母的ascii码
将加密后字符串调用vbastrcat函数与AKA-合并起来
然后调用vbastrcmp比对函数,比对,密码区输入与计算后的值
总的算法就是
(len(输入)*0x17CFB)+ 第一个字符的ascii码值(十六机制)。
注册机编写(python3)
# -*- coding: cp936 -*-
import binascii
def creake():
name = input(“输入用户名:”)
data = 0x17CFB
FirStr = name[0:1]
name_len = len(name)
FirStrAnst = int(binascii.b2a_hex(FirStr.encode(“utf-8”)),16)
Result = (name_len * data)+FirStrAnst #(len(输入)*0x17CFB)+ 第一个字符的ascii码值(十六机制)
ResultStr = “AKA-” + str(Result)
print (“破 解 码 为:”+ResultStr)
if __name__ == ‘__main__’:
creake()