1. 程式人生 > >逆向分析mfc程序

逆向分析mfc程序

逆向

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)
分析正確
技術分享圖片

逆向分析mfc程序