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相关推荐

  1. 软件安全实验(一)PEVIEW-弹窗操作

    软件安全实验(一) 实验名称:软件安全-PEVIEW-弹窗操作 实验软件:WinHex , OllyDBG , LordPE , PEview 实验效果:双击PEview后产生弹窗 实验思路: 实验步 ...

  2. 华中科技大学软件安全实验一【破解Demo简易】

    文章目录 前言 一.分析工具 二.实验步骤记录 1.看看破解软件长啥样! 2.尝试进行破解吧! 总结 前言 作者在复习软件安全这门课是所写 处于学习阶段,有什么错误,请各位大佬指正. 一.分析工具 O ...

  3. python动态数学计算验证码_python小实验:做验证码

    简直是我做过的最简单的小实验 感天动地 没啥大问题所以就写一下代码的意义之类的 首先 from PIL import Image, ImageDraw, ImageFont, ImageFilter ...

  4. 软件安全实验——局域网DDoS攻击

    文章目录 实验任务 实验过程 DoS攻击与DDoS攻击 ping命令参数 实施DDoS攻击 实验任务 对局域网内IP地址为10.12.186.186的主机(已关闭防火墙)发起基于网络流量的DDoS攻击 ...

  5. 软件安全实验——lab10(二、TCP/IP攻击实验)

    目录标题 1.实验室概况 2.实验室环境 2.1环撞设置 2.2教师须知 3.实验室的任务 3.1 Task (1): ARP缓存中毒 (1)80号工具攻击: (2)33号工具攻击: 3.2任务(2) ...

  6. 软件安全 实验 2 软件动态、静态分析技术 TraceMe.exe OllyDbg IDA

    实验 2 软件动态.静态分析技术 练习 1 动态调试技术 1.实验说明 动态分析是在可控环境中运行程序或者模拟程序的执行过程,同时利用分 析工具,监控程序的所有操作,观察其执行流程和状态,获取执行过程 ...

  7. 软件安全实验——lab8(SQL注入)(上)(旧虚拟机seedubuntu9版本实验)

    目录标题 2.实验室环境 2.1环境配置 2.2关闭对策 3.实验室的任务 3.1 Task 1(30分):针对SELECT语句的SQL注入攻击 3.2 Task 2(30分): SQL注入的UPDA ...

  8. 软件安全实验——lab7(缓冲区溢出3:返回导向编程技术ROP)

    目录标题 1.举例详细解释什么是Return-orientd Programming ROP?(至少两个例子:x86 和arm) (1)ROP在X86指令集上的实例 (2)ROP在ARM上的可行性 2 ...

  9. 软件安全实验——lab12(UAF(Use after free):C++野指针利用)

    目录标题 Task1:针对UAF.c的攻击 (1)环境准备工作 (2)获得shellcode在环境变量中的地址 (3)攻击 Task2: 针对uaf2.cpp的攻击 (1)编译程序 (2)找到m变量的 ...

最新文章

  1. catia 安装打开闪退_win10catia r20应用程序无法正常启动的解决办法
  2. python中3个单引号_Python中单引号,双引号,3个单引号及3个双引号的区别
  3. 二维矩阵中的最大矩形面积--java实现
  4. TCP(发消息:简易代码实现)
  5. 实战系列-Spring Boot跨域解决方案
  6. SQL Server基础之索引
  7. JSP-tomcat设置编码格式 配置utf-8(以防网页框以及网页显示的时候中文乱码)
  8. Python爬虫滑块验证
  9. 超链接去掉下划线代码
  10. Windows7安装 Anaconda3详细教程
  11. 如何做私域?私域流量运营怎么做?为什么今年都布局企业微信运营?(附企微运营干货)
  12. 记一次串口调试工具发指令无反应问题
  13. 独立开发变现周刊(第66期): 如何把一个短链接生成工具变成一个可持续盈利的产品?...
  14. matlab实现密堆立方体,LAMMPS如何定义六角密堆结构HCP
  15. 3、微信小程序-通信
  16. canal的INVALID_TOPIC_EXCEPTION问题
  17. 重磅:第十二届中国西部国际资本论坛盛大举办,分布式存储行业备受瞩目!
  18. Linux下C语言 对pow、exp未定义引用问题
  19. 数据类型(由类型创建变量)
  20. 计算机视觉大型攻略 —— 特征与匹配(3)特征描述符

热门文章

  1. 用DP-GEN跑个简单的例子吧——CH4
  2. 404php模板,WordPress程序设置404.php模板
  3. 【腾讯Bugly干货分享】人人都可以做深度学习应用:入门篇
  4. SQL高级查询 原文转载自:http://www.cnblogs.com/hoojo/archive/2011/07/16/2108129.html
  5. 不动产测绘数据入库_房产基础地理信息数据生产管理与入库更新一体化
  6. pip3 install 指定路径
  7. 企业电子招标采购系统源码Spring Cloud + Spring Boot 前后端分离 + 二次开发
  8. tp,fp,tn,fn的计算
  9. macbookpro怎么恢复出厂设置
  10. 第三方支付接口示例代码