【软件安全实验2022】验证码——1
exeinfo 查壳,没啥问题
打开 IDA,查找字符串
其中这一项比较可疑,形式一样,进入查看
进入,A
键整理字符串
整理好后是这样
X
键查看交叉引用
运气不错!进入
尝试 Tab
键转换成类 C 语言,因未定义函数,失败。
到起始位置,C
键转换成 code
,后 P
键转换成函数
这时就可以 Tab
键转换成类 C 语言,是函数 sub_40243A
this
类型明显不是 char**,应该是个句柄结构体指针,更换类型
IDA 帮我们分析好了,强强
观察这几部分,应该是个全局变量的数组
双击进入
换成数组
并 N
键重命名
ESC
键返回
Graph View
别扭,换成 Text View
,再在函数区域按 Tab
名字不对的话可以按 N
刷新
看着烦,隐藏了
发现里面没有加密函数,对 global_passwd
查看交叉引用,发现函数 sub_401F60
同样分析,先更换类型
函数 sub_401F60
关键代码如下,其中有生成 global_passwd
的关键部分
global_passwd
与程序开始运行时的时间、位置、计算机名称有关
GetLocalTime(&this->systemtime64);v2 = this->systemtime64.wHour + this->systemtime64.wDay;
weekday = this->systemtime64.wDayOfWeek;
month = this->systemtime64.wMonth;
nSize = 256;
global_passwd[0] = this->systemtime64.wYear + month + weekday + 2 * v2;
GetComputerNameA(computerName, &nSize);
v5 = 0;
if (strlen(computerName))
{v6 = global_passwd[1];do{v7 = computerName[v5++];v6 += this->systemtime64.wMonth + v7;global_passwd[1] = v6;} while (v5 < strlen(computerName));
}
GetModuleFileNameA(0, Filename, 0x100u);
for (i = 0; i < strlen(Filename); ++i)global_passwd[2] = this->systemtime64.wHour * (global_passwd[1] + Filename[i]);
而对于比较难看懂的第四部分的验证,在于函数 sub_402340
中,其中有
(A= dword ptr -20h)
mov [esp+30h+A], 67452301h
mov [esp+30h+A+4], 0EFCDAB89h
mov [esp+30h+A+8], 98BADCFEh
mov [esp+30h+A+12], 10325476h
经搜索得 67452301h,0EFCDAB89h,98BADCFEh,10325476h
均为 MD5 中使用的函数,经进一步分析,得出函数行为就是 MD5!
最终,验证码的主体逻辑代码如下,其中
CWnd::UpdateData(1); // 刷新输入数据strcpy(passwd, this->pchar7C); // 复制到Stringpasswd[19] = 0; // 末尾置'0'v6 = global_passwd[0];passwd[4] = 0; // 删除第一个'-'passwd[9] = 0; // 删除第二个'-'passwd[14] = 0; // 删除第三个'-'passwd_1 = strtol(passwd, &EndPtr, 16); // 第一部分转成数值passwd_2 = strtol(&passwd[5], &EndPtr, 16); // 第二部分转成数值passwd_3 = strtol(&passwd[10], &EndPtr, 16); // 第三部分转成数值strtol(&passwd[15], &EndPtr, 16);a1[0] = passwd[15];a1[1] = 0;md5(a1, strlen(a1), v8);if ( passwd_1 == v6&& (CWnd::MessageBoxA(this, "恭喜你!序列号第1部分正确!", 0, 0), passwd_2 == (global_passwd[1] >> 8))&& (CWnd::MessageBoxA(this, "恭喜你!序列号第2部分正确!", 0, 0), passwd_3 == ((global_passwd[0] + global_passwd[2]) >> 8))&& (CWnd::MessageBoxA(this, "恭喜你!序列号第3部分正确!", 0, 0), v8[3] == 0x69772661)&& passwd[16] == 'F'&& passwd[17] == 'F'&& passwd[18] == '0' ){result = CWnd::MessageBoxA(this, "恭喜你!序列号完全正确!", 0, 0);}
分析得 python
脚本
import hashlib
import datetime
import socket
import ostime = datetime.datetime.now() # 获取当前时间
year = time.year
month = time.month
weekday = time.weekday() + 1 # 星期一应该对应'1',故加一
hour = time.hour
day = time.daypasswd = [0, 0, 0, 0]passwd[0] = year + month + weekday + 2 * (hour + day)computerName = socket.gethostname().upper() # 获取计算机名,需要大写
for ch in computerName:passwd[1] += month + ord(ch)fileFlag = False
filePath = ''
for root, dirs, files in os.walk(os.getcwd(), topdown=True):if 'DemoD2022.exe' in files:filePath = root + '\\DemoD2022.exe'fileFlag = Truebreak
if fileFlag == False:print('未找到 DemoD2022.exe ,请放至同一文件夹下')exit(0)
for ch in filePath:passwd[2] = hour * (passwd[1] + ord(ch))for i in range(255):m = hashlib.md5()m.update(i.to_bytes(1, 'big'))if m.hexdigest()[24:] == '69772661':print(('{:04X}-{:04X}-{:04X}-{}FF0').format(passwd[0], passwd[1] >> 8,(passwd[0] + passwd[2]) >> 8,chr(i)))
【软件安全实验2022】验证码——1相关推荐
- 软件安全实验(一)PEVIEW-弹窗操作
软件安全实验(一) 实验名称:软件安全-PEVIEW-弹窗操作 实验软件:WinHex , OllyDBG , LordPE , PEview 实验效果:双击PEview后产生弹窗 实验思路: 实验步 ...
- 华中科技大学软件安全实验一【破解Demo简易】
文章目录 前言 一.分析工具 二.实验步骤记录 1.看看破解软件长啥样! 2.尝试进行破解吧! 总结 前言 作者在复习软件安全这门课是所写 处于学习阶段,有什么错误,请各位大佬指正. 一.分析工具 O ...
- python动态数学计算验证码_python小实验:做验证码
简直是我做过的最简单的小实验 感天动地 没啥大问题所以就写一下代码的意义之类的 首先 from PIL import Image, ImageDraw, ImageFont, ImageFilter ...
- 软件安全实验——局域网DDoS攻击
文章目录 实验任务 实验过程 DoS攻击与DDoS攻击 ping命令参数 实施DDoS攻击 实验任务 对局域网内IP地址为10.12.186.186的主机(已关闭防火墙)发起基于网络流量的DDoS攻击 ...
- 软件安全实验——lab10(二、TCP/IP攻击实验)
目录标题 1.实验室概况 2.实验室环境 2.1环撞设置 2.2教师须知 3.实验室的任务 3.1 Task (1): ARP缓存中毒 (1)80号工具攻击: (2)33号工具攻击: 3.2任务(2) ...
- 软件安全 实验 2 软件动态、静态分析技术 TraceMe.exe OllyDbg IDA
实验 2 软件动态.静态分析技术 练习 1 动态调试技术 1.实验说明 动态分析是在可控环境中运行程序或者模拟程序的执行过程,同时利用分 析工具,监控程序的所有操作,观察其执行流程和状态,获取执行过程 ...
- 软件安全实验——lab8(SQL注入)(上)(旧虚拟机seedubuntu9版本实验)
目录标题 2.实验室环境 2.1环境配置 2.2关闭对策 3.实验室的任务 3.1 Task 1(30分):针对SELECT语句的SQL注入攻击 3.2 Task 2(30分): SQL注入的UPDA ...
- 软件安全实验——lab7(缓冲区溢出3:返回导向编程技术ROP)
目录标题 1.举例详细解释什么是Return-orientd Programming ROP?(至少两个例子:x86 和arm) (1)ROP在X86指令集上的实例 (2)ROP在ARM上的可行性 2 ...
- 软件安全实验——lab12(UAF(Use after free):C++野指针利用)
目录标题 Task1:针对UAF.c的攻击 (1)环境准备工作 (2)获得shellcode在环境变量中的地址 (3)攻击 Task2: 针对uaf2.cpp的攻击 (1)编译程序 (2)找到m变量的 ...
最新文章
- catia 安装打开闪退_win10catia r20应用程序无法正常启动的解决办法
- python中3个单引号_Python中单引号,双引号,3个单引号及3个双引号的区别
- 二维矩阵中的最大矩形面积--java实现
- TCP(发消息:简易代码实现)
- 实战系列-Spring Boot跨域解决方案
- SQL Server基础之索引
- JSP-tomcat设置编码格式 配置utf-8(以防网页框以及网页显示的时候中文乱码)
- Python爬虫滑块验证
- 超链接去掉下划线代码
- Windows7安装 Anaconda3详细教程
- 如何做私域?私域流量运营怎么做?为什么今年都布局企业微信运营?(附企微运营干货)
- 记一次串口调试工具发指令无反应问题
- 独立开发变现周刊(第66期): 如何把一个短链接生成工具变成一个可持续盈利的产品?...
- matlab实现密堆立方体,LAMMPS如何定义六角密堆结构HCP
- 3、微信小程序-通信
- canal的INVALID_TOPIC_EXCEPTION问题
- 重磅:第十二届中国西部国际资本论坛盛大举办,分布式存储行业备受瞩目!
- Linux下C语言 对pow、exp未定义引用问题
- 数据类型(由类型创建变量)
- 计算机视觉大型攻略 —— 特征与匹配(3)特征描述符
热门文章
- 用DP-GEN跑个简单的例子吧——CH4
- 404php模板,WordPress程序设置404.php模板
- 【腾讯Bugly干货分享】人人都可以做深度学习应用:入门篇
- SQL高级查询 原文转载自:http://www.cnblogs.com/hoojo/archive/2011/07/16/2108129.html
- 不动产测绘数据入库_房产基础地理信息数据生产管理与入库更新一体化
- pip3 install 指定路径
- 企业电子招标采购系统源码Spring Cloud + Spring Boot 前后端分离 + 二次开发
- tp,fp,tn,fn的计算
- macbookpro怎么恢复出厂设置
- 第三方支付接口示例代码