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. python 使用import导入不同文件下的文件
  2. Java 里的 for (;;) 与 while (true),哪个更快?
  3. 如何布局文章标题才更吸引搜索引擎注意?
  4. [洛谷P5057][CQOI2006]简单题
  5. BZOJ 1444: [Jsoi2009]有趣的游戏
  6. python怎么处理数据_python panda怎么处理数据
  7. 莱斯分布概率分布曲线
  8. 3层vni vxlan_什么是VXLAN 三层网络搭建二层网络的设计方案
  9. python库skimage 图像直方图均衡化、自适应均衡化、对比度拉伸实现
  10. Java之mybatis详解(非原创)
  11. keepalived vrrp_script脚本不执行解决办法
  12. python递归实现快速对一个给定字符串排序输出
  13. Linux命令之md5sum
  14. 4. Zigbee应用程序框架开发指南 - 生成应用程序配置文件
  15. 【私有,不喜勿入】健康
  16. 机房收费系统问题集(2)——移动登陆界面+show出子窗体
  17. Excel公式与函数——每天学一个
  18. oracle绑定变量执行计划,绑定变量对执行计划的影响
  19. How to customize the UI in IBM ITIM Solution
  20. android x8,3英寸高性价比Android手机 索爱X8评测

热门文章

  1. 【A_star三维路径规划】基于matlab A_star算法无人机山地三维路径规划【含Matlab源码 266期】
  2. PS 滤镜插件Nick Collection
  3. Labview 串口通信
  4. Camtasia Studio2023电脑屏幕录制软件免费版
  5. 23种设计模式-行为型模式-访问者模式
  6. Photoshop(背景橡皮擦)轻松抠图(…
  7. F - 悼念512汶川大地震遇难同胞——珍惜现在,感恩生活 HDU - 2191
  8. 初级模拟玩骰子猜大小游戏
  9. 字节 位 字符 宽字符
  10. READONLY You can't write against a read only s