日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

xxxx(三)“黑吃黑”: 破解别人外挂

發(fā)布時間:2024/2/2 综合教程 29 生活家
生活随笔 收集整理的這篇文章主要介紹了 xxxx(三)“黑吃黑”: 破解别人外挂 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1、所謂掛外,本質(zhì)上是改變原有軟件的執(zhí)行流程。方式有兩種:

  通過改函數(shù)的參數(shù)來函數(shù)的執(zhí)行流程
直接改代碼,尤其是JCC、 call等跳轉(zhuǎn)指令。

外掛的形式大致也有兩種:

dll注入
直接改原軟件的exe、dll等PE文件
shellcode

破解別人的外掛,本質(zhì)上就是找到這個外掛更改了原軟件的哪些點,比如改了哪些函數(shù)的參數(shù)? 改了哪些關(guān)鍵的指令? 今天分享一些破解別人外掛的經(jīng)歷。

2、還是以xxxx這種軟件為例:有dll/shellcode注入的外掛,也有直接替換關(guān)鍵dll的外掛,這兩種外掛的破解方式原理一樣,不過表現(xiàn)形式稍微有點不同:

dll/shellcode注入:代碼注入后,肯定會改變原有代碼或數(shù)據(jù),怎么找到哪些地方被改變了? 用PChunter!再應(yīng)用層鉤子->進(jìn)程鉤子這里能看到exe或dll的哪些地方被掛鉤(更改前是什么、更改后又是什么);這種方法適合動態(tài)查看掛鉤的地方;

直接替換關(guān)鍵dll:由于exe加載執(zhí)行時已經(jīng)用了替換后的dll,PChunter沒法比對,所以是檢測不到掛鉤點的,這時只能先靜態(tài)分析了

3、(1)在網(wǎng)上找了一個能多開和防止消息撤回功能的外掛,只有一個dll,名字和官方版本的相同,直接替換就行。為了區(qū)分,我把掛外的dll名字后面加上了patch,官方原版dll的名字不變;

(2)010Editor在tools->compare files功能,可以對比兩個二進(jìn)制文件的異同,如下:一共找到8個diffrence,下面挨個看看這8個地方都改了啥

(3)先看看改動最多的一個,地址在0x986D20這里,一共改了5個字節(jié);從IDA來看,直接NOP掉了一個call??吹搅诉@里大家一定很好奇,這個call到底是干什么,為啥會被直接干掉了?

進(jìn)入被NOP掉的函數(shù):從字符串看,貌似是和登陸界面相關(guān)的函數(shù),猜測應(yīng)該是初始化登陸界面的。正常函數(shù)一開始應(yīng)該是push ebp, mov ebp,esp, sub esp,xxxx等。但是這個函數(shù)一進(jìn)來就是call跳轉(zhuǎn),此處反常必有妖,繼續(xù)跟進(jìn)這個call函數(shù);

看到這里相比大家都明白了:這是防止多開的函數(shù),通過mutex防止被多開,所以這個被NOP掉的函數(shù)邏輯就清晰了:第一次運行時先建立mutex,再初始化登陸界面;第二次運行時發(fā)現(xiàn)已經(jīng)有這個mutext,程序直接退出

(4)再從頭看看其他被改動的代碼都是啥了,如下:

第一個:把JZ改成JMP,也就是無條件跳轉(zhuǎn)(原本是bl等于0才跳轉(zhuǎn))

第二個:test eax,eax改成xor eax,eax,導(dǎo)致后面的JZ無條件執(zhí)行

第三個:原本eax大于9才執(zhí)行的ja語句,這里也改成無條件執(zhí)行jmp了:

第四個:test被改成xor,ecx被清零,jz語句被改成必須執(zhí)行;

第五個:同上,原本al等于0才跳轉(zhuǎn),這里改成jmp無條件跳轉(zhuǎn)

第六、七同上:test改成xor,把ZF置1,讓JNZ肯定執(zhí)行;

上面各種被強制跳轉(zhuǎn)/不跳轉(zhuǎn)的代碼到底是做什么的了?有啥業(yè)務(wù)意義了?下面繼續(xù)通過OD動態(tài)調(diào)試查看。

(5)先看看效果:外掛dll放在虛擬機,另一個賬號在物理機;物理機的賬號給虛擬機發(fā)消息“測試‘,然后撤回,物理機會顯示“你撤回了一條消息”;此時虛擬機賬號也會顯示一條消息是“xxx撤回了一條消息”,但虛擬機賬號任然能看到”測試“這條消息,說明撤回功能是ok的!

站在正向開發(fā)的角度考慮撤回消息的流程:

發(fā)送方選擇撤回,此時在消息窗口不再顯示這條消息,同時給接收方發(fā)送消息撤回的指令
接收方收到撤回的指令后,立即從消息框中抹掉剛才展示的消息,然后展示”xxx測繪了一條消息“; 整個撤回最關(guān)鍵的地方就在這里了:接收方收到撤回指令后拒絕,或走另一個不撤回的分支,這也是上面所有防撤回功能都更改JCC指令的原因

現(xiàn)在挨個分析更改地方都做了啥:

第一個明顯是防止多開的,這個不用調(diào)試了,其他都是改變JCC指令來改變原有的執(zhí)行流程,挨個下斷點看看都干了啥(實現(xiàn)啥功能);

下斷點的時候注意:這個關(guān)鍵dll的基址是66B00000,上面靜態(tài)分析找到偏移,調(diào)試時斷點的位置都是通過基址+偏移方式找到的

這里打個岔: 下面看到了VMP0段,終于開始加殼保護(hù)了!后續(xù)有時間會單獨分析這個vmp0段到底干了啥(肯定是很重要的代碼,否則沒必要加殼了)!

經(jīng)過幾次重復(fù)實際測試:上面下了7個斷點,只有這一個斷下來了!其他6個都沒用,也不知道外掛作者是怎么想的,為啥要改那么多沒用的地方............

繼續(xù)跟蹤,進(jìn)入je這個跳轉(zhuǎn)看看都走了啥:這里push了一個session會話,猜測可能和聊天對象(也就是消息的接收人)相關(guān):

繼續(xù)單步調(diào)試進(jìn)入call:這里就非常清晰了,從字面意思都能看出來是解析撤回內(nèi)容的!

突然想到有個IM軟件叫”電報“,是不是也能通過這種方式防止別人撤回了(我還沒試過........)?

xxxx軟件的版本:3.1.0.41

總結(jié)

以上是生活随笔為你收集整理的xxxx(三)“黑吃黑”: 破解别人外挂的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。