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)
分析正确