用Dede再次大戰一個工資管理軟體
目標鎖定: 某款工資軟體
分析:可以從兩個地方入手:1 登陸選單中判斷時間過期處 2 填寫註冊資訊的表單
下面先從2入手
1 檔案脫殼,分析完畢
2 進入“窗體”,看每一個窗體的標題,找到“公司資訊及註冊”TFrm_ComPany
3 找到其中的一個按鈕
object BtnReg: TBitBtn
Left = 144
Top = 8
Width = 89
Height = 25
Caption = '馬上註冊'
Default = True
Font.Charset = GB2312_CHARSET
Font.Color = clRed
Font.Height = -12
Font.Name = '宋體'
Font.Style = []
ParentFont = False
TabOrder = 0
OnClick = BtnRegClick <---
4 在“過程”裡面查詢類名為TFrm_ComPany的類對應的單元名,為CompanyUnit
或者 在“工程”裡面建立檔案,在生成dump目錄的events.txt 裡面查詢TFrm_ComPany,知道該檔案的名字是CompanyUnit.pas
5 點選CompanyUnit,在右邊“事件”中看到BtnRegClick等這幾個方法呼叫,一個一個察看
6 先雙擊BtnRegClick,察看該過程的程式碼
* Reference to: forms.TApplication.MessageBox(TApplication;PChar;PChar;Longint):Integer;
這裡應該是彈出"填寫公司名稱"的視窗,繼續往下走
接下來執行了一個SQL,根據後面的分析,應該是驗證完註冊馬之後,才儲存使用者單位資訊,所以驗證應該在此處前面
* Possible String Reference to: 'Update Sys_Company Set 企業名稱=:Company,企業地址=:Address,聯絡電話=:tel,網址=:Web,'
* Possible String Reference to: ' 電子郵件=:Email,硬碟號=:HardWareId,註冊號=:SerialNo'
* Possible String Reference to: ' where 編碼=:DiskNo'
從Try開始,運算元據庫,所以Try往上
從此處往上找jmp,
005010B9 E955040000 jmp 00501513 <---這個00501513直接就是End了
如果要不執行該句,往上只有
00501097 7425 jz 005010BE
因此,思路有了
從頭開始看
* Reference to control TFrm_ComPany.EdtComPany : TdxEdit
* Reference to: controls.TControl.GetText(TControl):TCaption;
* Reference to: forms.TApplication.MessageBox(TApplication;PChar;PChar;Longint):Integer;
檢查公司名不為空
* Reference to control TFrm_ComPany.EdtSerialNo : TdxEdit
* Reference to: controls.TControl.GetText(TControl):TCaption;
取得序列號,不知道做了什麼
* Reference to control TFrm_ComPany.EdtSerialNo : TdxEdit
* Reference to: controls.TControl.GetText(TControl):TCaption;
又取了一遍
然後又作了什麼,就到了
00501097 7425 jz 005010BE ,從005010BE繼續順利前進
否則,不跳的話,Label1付值,應該就是顯示“註冊號不正確”
* Reference to control TFrm_ComPany.Label1 : TLabel
* Reference to: controls.TControl.SetText(TControl;TCaption);
所以關鍵就是這裡的jz要改成jmps
在工具--> 地址偏移轉換器中,RVA輸入00501097,得到實體地址00101097
用UltraEdit找到00101090,在第7 8 列有7524
修改之後,重新登陸,發現仍然說試用期以過,看來還是隻能從檢查試用期著手
看看MainFrm中,登陸窗體是如何載入的
1 查詢TMainFrm,單元名Main
2 在生成的工程檔案Main.pas中找到TFrm_ComPany,
發現
procedure TMainFrm.N8Click(Sender : TObject);
begin
(*
* Reference to : TFrm_ComPany.Proc_00500C4C()
|
00729850 E8F773DDFF call 00500C4C
00729855 C3 ret
*)
end;
由此可知TFrm_ComPany.Proc_00500C4C是初始化函式
上面沒什麼思路,從1開始入手
1 找到TUserLoginFrm
object BtOk: TFlatButton
OnClick = FlatButton1Click
2 找到從events.txt裡面找到其對應的為LoginWinUnit(單元名)或直接在過程裡面找TUserLoginFrm,注意過程中的類名不按照順序排列的
3 找到事件FlatButton1Click
TUserLoginFrm.Proc_005085C8() 是Main裡面呼叫登陸的啟動函式
4 啟動的時候,先檢查密碼錯誤,然後彈出“試用期結束”,然後彈出註冊框
所以,直接找到
Possible String Reference to: '密碼輸入錯誤!!!' 這行
00508D3D 685C8F5000 push $00508F5C
之後的函式每一個都很重要了,一個個的看
* Reference to: Unit_00409424.Proc_0040BC18
一進入就看到一個* Reference to: kernel32.GetLocalTime()
根據上面,顯示一個對話方塊有固定的語句
* Reference to: controls.TControl.GetText(TControl):TCaption;
|
00508BD5 E8CE0BF3FF call 004397A8
00508BDA 8B45E4 mov eax, [ebp-$1C]
00508BDD 50 push eax
* Possible String Reference to: '不存在該工號的使用者!!!'
|
00508BDE 68D48E5000 push $00508ED4
* Reference to: Unit_00409424.Proc_0040BC18
|
00508BE3 E83030F0FF call 0040BC18
00508BE8 83C4F8 add esp, -$08
00508BEB DD1C24 fstp qword ptr [esp]
00508BEE 9B wait
00508BEF 8D55E0 lea edx, [ebp-$20]
* Reference to control TUserLoginFrm.LoginName_Edit : TdxPickEdit
|
00508BF2 8B86FC020000 mov eax, [esi+$02FC]
* Reference to : TdxInplaceMaskEdit._PROC_004C742C()
|
00508BF8 E82FE8FBFF call 004C742C
00508BFD 8B45E0 mov eax, [ebp-$20]
* Reference to pointer to GlobalVar_00734AC8
|
00508C00 8B15E82E7300 mov edx, [$00732EE8]
* Reference to field GlobalVar_00734AC8.OFFS_0038
|
00508C06 8B5238 mov edx, [edx+$38]
所以我們排除很多無用的程式碼
* Reference to: Unit_00501C00.Proc_00504DF8 這是紀錄這次登陸的日誌,這裡也是唯一可能的地方了,雙擊進入
什麼都不用想,找jmp
00504E4B E92A010000 jmp 00504F7A <--這裡基本就是退出
但仔細察看後,發現沒有什麼jz,jnz,光是jmp是沒有作用的
於是只能往上找,在檢查了使用者名稱,密碼的SQL後面,發現了
00508CCC E81790FFFF call 00501CE8
它裡面有和執行日期相關的SQL,應該是第一次執行建立帳號的,如果賬號已經存在了,就把序列號,上次使用時間全部取出來,
可能用於判斷
(實在搞不定了,我狠狠心把00508CCC得E81790FFFF改成9090909090,最後成功)
總結: 作者設計的加密還是還是比較小心,浪費我好多時間,最後只有咬牙賭運氣,沒想到成功了,本來準備用Softice除錯的,無奈本機是XP系統,要執行那個所謂的21步驟才能執行,所以還是採用靜態分析的方法了.
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=636116
相關文章
- 防止用DeDe軟體反編譯delphi程式 (轉)編譯
- 公司管理用哪個軟體好?
- 探究員工述職管理用什麼管理軟體好實現?
- 計件工資管理系統軟體有哪個好
- 使用PyQt開發一個資料庫管理桌面軟體QT資料庫
- 在Google管理一個軟體團隊Go
- 做一個軟體開發者的最大挑戰
- 投標流程管理用什麼管理軟體哪個好?
- 用開源軟體管理資料中心(轉)
- OA管理軟體新體驗:與舊時代說再見
- 用C++編寫一個簡單的員工工資管理系統~C++
- 開源專案管理軟體有哪些?分享7個實用開源專案管理軟體專案管理
- 山東工廠能源管理系統,能耗管理軟體
- 最大密碼管理軟體之一LastPass再遭網路攻擊,客戶資料洩露密碼AST
- IBM Storage Management管理軟體的一個BugIBM
- 應用版本控制軟體管理軟體開發
- [企業管理]一個軟體企業管理的典型案例分析
- 用Python做一個翻譯軟體Python
- [軟體工藝]
- 如何讓員工喜歡用CRM軟體?
- 一個專業的缺陷跟蹤管理軟體:JIRA
- 軟體測試,如何工資過萬?
- 請教一個軟體應用如何在多個網站複用網站
- 專案管理軟體哪個好用專案管理
- 一般律所案件管理用什麼專案管理軟體好?專案管理
- 啥叫軟體配置管理?——一個通俗的解釋
- DBeaverUltimate for Mac(資料庫管理軟體)23.2.5啟用版Mac資料庫
- 谷歌雲和AWS再開戰:硝煙瀰漫皆因一個資料盒子!谷歌
- 圖書出版流程管理用什麼管理軟體?
- 部署管理用什麼專案管理軟體好?專案管理
- [軟體工程]程式碼的複用與軟體企業管理軟體工程
- 管理晉階祕籍:一個成功的軟體專案,該如何規範管理體系?
- 如何設計一個資料庫中介軟體資料庫
- 【再談軟體生存週期】
- 什麼是人力資本管理(HCM)?用什麼軟體可幫助管理?
- [個體軟體過程]之時間管理 (轉)
- Linux軟體管理之YUM軟體管理Linux
- CRM銷售管理軟體哪個好,該如何選擇?(一)