[CrackMe]Brad Soblesky.1.exe和Brad Soblesky.2.exe的逆向及注册机编写

news2024/11/24 19:51:31

1. CrackMe小程序Brad Soblesky.1.exe分析


首先尝试程序功能, 发现其会弹出一个对话框, 上面有字符串, 可以通过直接定位MessageBox的位置, 但这里使用搜索字符串的方法:

查找所有字符串:

追踪到后, 就可以发现一个非常清晰的结构:

发现是明文, 立马就可以找到对应的密钥

2. CrackMe小程序Brad Soblesky.2.exe

第二个CrackMe小程序, 发现其需要输入2个字符串, 然后得出结果:

搜索该字符串后定位到该函数的起始位置:

将输入的内容12345678的二级指针传到了ecx内, eax内获取长度, 与5进行对比, 确保用户名至少5个字节

将输入的内容12345678的二级指针传到了ecx内, 然后传入了该call内, 发现该call提取了其中的一个字符

其首先对比长度, 如果没有全部运算完, 调用GetCharInBuffer获取下一个字符然后继续进行运算

发现其最终运算完成后生成eax, 然后它将其作为参数传入了一个Format函数进行格式化。

最终获取了一串十进制字符串

最终进行对比后得出结论:

获取了最终的密码, 其第一个edit控件中传入的内容会经过运算最终会生成一段字符串, 这串字符串就是密钥

3. 注册机的编写 

这里直接使用汇编语言编写:

.386
.model flat, stdcall  ;32 bit memory model
option casemap :none  ;case sensitive

include KeyGen.inc

.data 
g_szOriginString    db 32 dup(0)

.code

start:

	invoke GetModuleHandle,NULL
	mov	hInstance,eax

    	invoke InitCommonControls
	invoke DialogBoxParam,hInstance,IDD_DIALOG,NULL,addr DlgProc,NULL
	invoke ExitProcess,0

GenPwd PROC stdcall hWnd:HWND
	LOCAL @strOriginLen:DWORD
	LOCAL @strOriginIdx:DWORD
	LOCAL @dwFixVal:DWORD
	
	invoke GetDlgItemText, hWnd, IDC_EDT_ORIGIN, offset g_szOriginString, size g_szOriginString
	; 获取原字符串长度, 并初始化数组偏移
	invoke lstrlen, offset g_szOriginString
	mov @strOriginLen, eax 
	mov @strOriginIdx, 0
	mov @dwFixVal,  81276345h
	
	jmp short STARTLOOP
	; 指向下一个字符
NEXTLOOP:
	mov edx, @strOriginIdx
	add edx, 1
	mov @strOriginIdx, edx
STARTLOOP:
	mov eax,@strOriginIdx
	cmp eax, @strOriginLen
	jge short ENDLOOP
	mov ecx, @strOriginIdx
	mov al, byte ptr g_szOriginString[ecx]      
	movsx edx,al
	mov eax,@dwFixVal                          
	add eax,edx
	mov @dwFixVal, eax
	mov ecx, @strOriginIdx
	shl ecx, 8
	mov edx, @dwFixVal
	xor edx,ecx
	mov @dwFixVal, edx
	mov eax, @strOriginIdx
	add eax, 1
	mov ecx, @strOriginLen
	imul ecx, @strOriginIdx
	not ecx
	imul eax,ecx
	mov edx, @dwFixVal
	imul edx,eax
	mov @dwFixVal, edx
	jmp short NEXTLOOP
ENDLOOP:
	mov eax, @dwFixVal
	invoke SetDlgItemInt, hWnd, IDC_EDT_PWD, eax, FALSE
	ret

GenPwd endp

DlgProc proc hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM

	mov		eax,uMsg
	.if eax==WM_INITDIALOG

	.elseif eax==WM_COMMAND
		mov eax, wParam
		.if ax == IDC_BTN_GEN
			invoke GenPwd, hWin
		.endif
	.elseif eax==WM_CLOSE
		invoke EndDialog,hWin,0
	.else
		mov		eax,FALSE
		ret
	.endif
	mov		eax,TRUE
	ret

DlgProc endp

end start

完成后的效果:

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/795886.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

解决了项目中几个比较搞心态的bug(前端vue、小程序)

1、keep-alive 正常keep-alive的使用便可以做项目的缓存,但是我们的项目很不正常 项目是属于动态缓存,动态缓存有一个弊端 举个栗子: a组件为设置了需要缓存的页面; b组件为设置了需要缓存的页面; c组件为设置了不需…

nginx mirror代码分析

实现方式 mirror逻辑的工作阶段: ngx在log phase之后(在ngx_http_free_request处调用)已完成向client端返回response,在log phase之后完成close connection(短链接),在该阶段处理mirror逻辑不…

Gempy三维结构地质建模简明教程

Gempy 是一个开源 Python 库,用于生成完整的 3D 结构地质模型。 该库是一个完整的开发,用于从界面、断层和层方向创建地质模型,它还关联地质层的顺序以表示岩石侵入和断层顺序。 推荐:用 NSDT设计器 快速搭建可编程3D场景。 地质建…

【c++】vector的使用与模拟实现

🚀write in front🚀 📜所属专栏:初阶数据结构 🛰️博客主页:睿睿的博客主页 🛰️代码仓库:🎉VS2022_C语言仓库 🎡您的点赞、关注、收藏、评论,是对…

【Nodejs】操作mysql数据库

1.mysql 介绍 付费的商用数据库: Oracle,典型的高富帅;SQL Server,微软自家产品,Windows定制专款;DB2,IBM的产品,听起来挺高端;Sybase,曾经跟微软是好基友&a…

modbus tcp协议介绍及分析

一、modbus tcp协议介绍 Modbus TCP协议是基于TCP/IP网络的Modbus协议的一种变体。它将Modbus协议封装在TCP/IP协议栈中,使用以太网作为物理层,通过TCP连接来实现设备之间的通信。 Modbus TCP协议具有以下特点: 面向连接:Modbus T…

学习 C语言第二天 :C语言数据类型和变量(上)

目录: 1.数据类型介绍 2.signed和unsigned的介绍 3.数据类型的取值范围 1.数据类型介绍 C语言提供了丰富的数据类型来描述生活中的各种数据。使用整型类型来描述整数,使用字符类型来描述字符,使用浮点型类型来描述小数。所谓“类型”&#xf…

一文1500字从0到1搭建 Jenkins 自动化测试平台

Jenkins 自动化测试平台的作用 自动化构建平台的执行流程(目标)是: 我们将代码提交到代码托管工具上,如github、gitlab、gitee等。 1、Jenkins要能够检测到我们的提交。 2、Jenkins检测到提交后,要自动拉取代码&…

PostgreSQL构建时间

– PostgreSQL构建时间 select make_timestamp(2023,7,27,7,34,16);

python dataframe转置 多行转列

如上图 转置为下图: index_cols [身份证,手机号,serial_number]dfT df_last.set_index(index_cols).stack().unstack([0,1,2,])

EMP-SSL: TOWARDS SELF-SUPERVISED LEARNING IN ONETRAINING EPOCH

Recently, self-supervised learning (SSL) has achieved tremendous success in learning image representation. Despite the empirical success, most self-supervised learning methods are rather “inefficient” learners, typically taking hundreds of training epoch…

C++STL库中的vector

文章目录 vector的介绍及使用 vector深度剖析及模拟实现 动态二维数组理解 一、vector的介绍及使用 1.vector的介绍 1. vector是表示可变大小数组的序列容器。 2. 就像数组一样,vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进…

进阶 vue3自定义指令 vue中常用自定义指令

文章目录 vue3自定义指令1.什么是自定义指令&#xff1f;2.注册自定义指令2.1 全局注册2.2 局部注册<script setup>中注册&#xff1a;<script>中使用&#xff1a; 3.钩子函数参数详解4.指令传值5.总结 常用自定义指令案例v-longpress 长按v-debounce 防抖v-thrott…

kubernetes安装问题记录

kubernetes安装问题记录 【1】未配置 host 文件警告1.1 原因1.2 解决方案 【2】swap 未禁用警告2.1 产生原因2.2 解决方式 【3】containerd 进程禁用了 cri 模块插件3.1 原因3.2 解决方法 问题1-3的完整错误日志【4】因错误中断再次 kubeadm init 报错4.1 原因4.2 解决方案 【5…

【学习篇】SAE J1939协议—常用到的知识点

前言&#xff1a;以下关于SAE J1939协议知识点的学习均抄录自书籍&#xff0c;侵权请联系删除。 故障诊断 SAE J1939诊断应用层定义了用于诊断服务的报文帧&#xff0c;诊断报文&#xff08;DM&#xff09;提供了用于车辆进行诊断和维修的功能。 诊断故障代码定义 SAE J193…

从Vue层面 - 解析发布订阅模式和观察者模式区别

目录 前言一、发布订阅模式什么是发布订阅模式&#xff1f;应用场景 二、观察者模式1&#xff09;什么是观察者模式&#xff1f;2&#xff09;应用场景3&#xff09;vue中的观察者模式观察者&#xff08;订阅者&#xff09; - Watcher目标者&#xff08;发布者&#xff09; - D…

内部类(上)成员内部类,局部内部类的使用

文章目录 前言一、内部类是什么&#xff1f;二、如何使用&#xff1f; 1.成员内部类2.局部内部类总结 前言 如果在一个文件中创建了两个类&#xff0c;那么这两个类是并列关系&#xff0c;不存在哪一个类包含哪一个类的情况。如果在类中再定义一个类&#xff0c;那么这个在类中…

VMPWN的入门系列-1

温馨提示&#xff1a; 今天的文章有点长&#xff0c;图片比较多&#xff0c;请耐心阅读 5.1 实验一 VMPWN1 5.1.1 题目简介 这是一道基础的VM相关题目&#xff0c;VMPWN的入门级别题目。前面提到VMPWN一般都是接收字节码然后对字节码进行解析&#xff0c;但是这道题目不接受字节…

加载已训练好的目标检测YOLOv8,v5,v3,v6模型,对数据集中某张图片中的object打上方框、标出类别,并将图片保存到本地

参考的教程&#xff1a;Python - Ultralytics YOLOv8 Docs 在与ultralytics代码同一层级下新建 predict.py 里面写下面的内容。运行即可 from ultralytics import YOLO from PIL import Image import cv2# 加载计划使用的模型 model YOLO("yolov8n.pt") # load a…

Flask deleteput

Flask delete&put 一、delete 请求1.1 代码1.2 分析1.3 验证 二、put请求2.1 代码2.2 分析2.3 验证 三、总结 Flask get&post 请求传送门&#xff1a;FLASK get&post分析 一、delete 请求 1.1 代码 from flask import Flask, requestapp Flask(__name__)app.ro…