逆向分析mfc程序
阿新 • • 發佈:2018-05-22
逆向1.查看版本
2.運行程序看看
目的是點亮確定按扭 思路很多(直改exe文件 字符串搜索等)這裏用api下斷分析
可以看出是vc2013 那就下點擊斷點 思路找特征碼(與版本相關)
2013 按扭事件
果然有個跳轉與call
到這裏應該想到按扭上的數字保存在哪
這裏哪個才是
應該是類的首地址加偏移不行就一個個進去看看對比
通過下面可以看出ecx為this指針 它又給eax
再分析 內存 前面一段是每個按的數據 後面一段是按第一次為1第二次又變為0 再加上前面說的總和必須為9 也就是說所有按扭都必須按一次
那答案就出來了 有的按倆次(0)有的按一次(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應該就是解密的
到這裏應該想到按扭上的數字保存在哪
這裏哪個才是
應該是類的首地址加偏移不行就一個個進去看看對比
通過下面可以看出ecx為this指針 它又給eax
同時想下 成員變量很定離首地址很遠 猜eax+0xe4
數據窗口跟隨果然是一段初始化為0的地址
找到了數據那就一個按扭一個按扭去試看有什麽變化
通過分析
後面是什麽還是不怎麽清析
那就進
UpdateData(TRUE)
UpdateData(FALSE)之間的call看看
前面條件先nop
步入
發現一些可疑數據
一個個用數據窗口跟隨看看
發現就是後面那一段的數據
分析結果
從那開始的數據必須是 011010101
再回到外面 這裏的意思是總和必須等於9(每點一點加上按扭上的數)
再分析 內存 前面一段是每個按的數據 後面一段是按第一次為1第二次又變為0 再加上前面說的總和必須為9 也就是說所有按扭都必須按一次
那答案就出來了 有的按倆次(0)有的按一次(1)
分析正確
逆向分析mfc程序