1.查看版本
2.运行程序看看
目的是点亮确定按扭 思路很多(直改exe文件 字符串搜索等)这里用api下断分析
可以看出是vc2013 那就下点击断点 思路找特征码(与版本相关)
2013 按扭事件
特征码
VS2013 Debug 静态编译
CALL DWORD PTR SS:[EBP-0x8]
VS2013 Release 版静态编译
CALL DWORD PTR SS:[EBP+0x14]
直接载入od搜特征码
先运行程序
然后全部下断 然后一个个试去掉没用的
开始分析
点击第一个
步入发现对称
最开始
最后
可以确定是
UpdateData(TRUE)
UpdateData(FALSE)
中间的代码很定是用户实现找其中的call应该就是解密的
果然有个跳转与call
到这里应该想到按扭上的数字保存在哪
这里哪个才是
应该是类的首地址加偏移不行就一个个进去看看对比
通过下面可以看出ecx为this指针 它又给eax
同时想下 成员变量很定离首地址很远 猜eax+0xe4
数据窗口跟随果然是一段初始化为0的地址
找到了数据那就一个按扭一个按扭去试看有什么变化
通过分析
后面是什么还是不怎么清析
那就进
UpdateData(TRUE)
UpdateData(FALSE)之间的call看看
前面条件先nop
步入
发现一些可疑数据
一个个用数据窗口跟随看看
发现就是后面那一段的数据
分析结果
从那开始的数据必须是 011010101
再回到外面 这里的意思是总和必须等于9(每点一点加上按扭上的数)
再分析 内存 前面一段是每个按的数据 后面一段是按第一次为1第二次又变为0 再加上前面说的总和必须为9 也就是说所有按扭都必须按一次
那答案就出来了 有的按俩次(0)有的按一次(1)
分析正确