吾愛破解 - LCG - LSG |安卓破解|病毒分析|破解軟件|jn-dxmm.com

 找回密碼
 注冊[Register]

QQ登錄

广西快三只需一步,快速開始

搜索
查看: 14051|回復: 196

[Android 原創] 2020年春節紅包第四題wp

    [復制鏈接]
夢游槍手 發表于 2020-2-10 03:03
本帖最后由 夢游槍手 于 2020-2-10 14:50 編輯

準備工具

IDA Pro,GDA,能真機調試的Android機一臺

GDA分析

先把apk拉到GDA,找到MainActivity的onClick方法。
QQ截圖20200209135516.png
主要邏輯代碼在so文件里面。

IDA分析調試

直接把libxtian.so丟到IDA分析,但沒找到checkSn函數,說明函數是動態注冊的。so有混淆,無法靜態分析,只能真機調試了,真機調試的步驟網上有很多,這里就略過了。
動態注冊Native的函數為RegisterNatives,啟動調試,IDA停在JNI_OnLoad函數后,轉到 _ZN3art3JNI15RegisterNativesEP7_JNIEnvP7_jclassPK15JNINativeMethodi,下斷后運行。
QQ截圖20200209141708.png
跟隨R2寄存器,就能找到checkSn函數的地址了。
QQ截圖20200209141926.png
重命名為checkSn并下斷,在真機那邊輸入uid和假碼,點驗證,IDA停在checkSn函數上,說明就是這里了。
現在面對最大的一個問題:混淆。
QQ截圖20200209143858.png
看起來是一個自寫的類似OLLVM的控制流混淆。因為流程混淆有直接操作PC寄存器的代碼,所以IDA的F5報廢,字符串也都是運行時才會解密,無法下手。
QQ截圖20200209144134.png
樓主不會去混淆,而且為了這個紅包題專門去分析混淆手段也太累了,就想頂著混淆解決。
這時候就可以用IDA的trace功能,用它抓取程序執行過的所有指令,不過這個紅包題可以不用抓所有指令,可以使用function tracing,只抓取函數調用。
QQ截圖20200209152748.png
但不知為何,trace會跑飛,抓取不到所有的函數調用,所以我只好弄了個IDC腳本來單步。

static main(void)
{
    do
    {
        step_over();
        wait_for_next_event(STEP,-1);
    }while(PC!=0xEEDAFC2C);//停在何處
}

注意要設置腳本停止在checkSn函數返回處,設置斷點防止跑飛。
QQ截圖20200209154954.png
IDA停在checkSn后,打開function tracing,跑一次腳本,等停在checkSnretn,按esc后退,找到跑飛處,在下面那句代碼下斷。清除trace記錄后,在checkSn函數頭再跑一次。
QQ截圖20200209155235.png

分析checkSn的函數調用

抓到函數調用后,關閉function tracing,在抓取到的指令上下斷,跟蹤分析,由于我已經分析過一次了,所以指令上面有注釋。
QQ截圖20200209160730.png
在最后一條BLX上,也就是getpwdlen上下斷,停下后步入,注意觀察。
QQ截圖20200209161134.png
R6寄存器存放著GetStringUTFLength函數的地址,說明這里確實是取字符串長度的,至于是uid還pwd用排除法即可。
走出API調用后,回到checkSn繼續往下跟,可以找到檢查pwd的長度的代碼。
QQ截圖20200209162057.png
pwd長度不足15,所以直接返回了,我們修改下假碼,繼續抓取,逐個分析即可。
QQ截圖20200209163941.png
現在看圖里的trace也能知道大致流程了,checkSn獲取輸入的uid和pwd,調用check函數,判斷是否pwd符合uid。修改check函數的返回值為1并運行,Toast顯示成功,說明正確。
現在把分析目標轉到check函數,check函數內也有混淆,修改上面的腳本為PC!=0xEEDAF362并下斷,并使用上面的步驟抓取所有函數調用。
QQ截圖20200209203630.png

分析check函數

我的IDA在check函數無法使用function tracing,app會崩潰,原因未知,所以我只能改成instruction tracing了。抓取的指令太多就不展示出來了,我會放在附件里。
這里說下check函數的分析思路和主要流程。
在trace文件里找出所有BLX,下斷步入,如果是調用API,則跟蹤出API名,如果是調用so本身的函數,那就直接在LR的地址下斷運行。不要忘記記錄參數和返回值。
如果對每個調用的內部函數都trace一遍,讀代碼,我覺得要花太多時間,所以記錄參數和返回值,憑經驗直接猜算法,如果猜不到再trace指令。
check函數首先調用gettimeofday,然后將timeval除以1800000,也就是30分鐘。
QQ截圖20200209215546.png
然后將uid和結果拼接在一起,算出一個32字節的hash,存放在棧頂地址處。
QQ截圖20200210020601.png
這個hash算法我沒能還原出來,本來以為是sm3,但是驗算了幾次都不對,跟也跟不出個頭緒,就直接過了,還好不影響解出題目。
之后取出hash的17-20位。
QQ截圖20200210020926.png
與uid拼接到一起,等待最后比較。
QQ截圖20200210021302.png
接著對pwd進行base64解碼,碼表是修改過的,圖里寫的sm3就是上面的hash,忘了改注釋。
QQ截圖20200210021532.png
解碼后,再進行RC4解密,key為52pojie2020xtian
QQ截圖20200210022022.png
逐位異或0x20。
QQ截圖20200210022121.png
QQ截圖20200210022346.png
最后與uid+hash比較。
QQ截圖20200210022616.png
check函數的流程就走完了。

編寫注冊機

沒還原出hash算法,所以不能寫出注冊機,因為pwd時效只有30分鐘。
广西快三 只能在JNI_OnLoad+43B2處復制對應當前時間的結果,再加密。附python代碼一份

import hashlib
from Crypto.Cipher import ARC4
b64table = 'AzSxleoQp02MtvisIZUF8ThRaEL9Nd57qG6DfOkW4JHXmYjwV1Pn3uycrCgbKB-_='
decryptkey = '52pojie2020xtian'

def RC4(data, key):
    rc41 = ARC4.new(key)
    encrypted = rc41.encrypt(data)
    return encrypted

def b64encode(s):
    res = []
    leftover = len(s) % 3
    for i in range(0, len(s) - leftover, 3):
        c2 = ord(s[i])
        c1 = ord(s[i + 1])
        c0 = ord(s[i + 2])
        res.append(b64table[(c2 >> 2) & 0x3f])
        res.append(b64table[((c2 & 0x3) << 4) | ((c1 >> 4) & 0x0f)])
        res.append(b64table[((c1 & 0x0f) << 2) | ((c0 >> 6) & 0x03)])
        res.append(b64table[c0 & 0x3f])
    i += 3
    if leftover == 1:
        c2 = ord(s[i])
        res.append(b64table[(c2 >> 2) & 0x3f])
        res.append(b64table[(c2 & 0x3) << 4])
        res.append(b64table[-1])
        res.append(b64table[-1])
    elif leftover == 2:
        c2 = ord(s[i])
        c1 = ord(s[i + 1])
        res.append(b64table[(c2 >> 2) & 0x3f])
        res.append(b64table[((c2 & 0x3) << 4) | ((c1 >> 4) & 0x0f)])
        res.append(b64table[(c1 & 0x0f) << 2])
        res.append(b64table[-1])
    return ''.join(res)

def b64decode(s):
    res = []
    end = len(s)
    if s[-1] == b64table[-1]:
        end -= 4
    for i in range(0, end, 4):
        c3, c2, c1, c0 = b64table.index(s[i]), b64table.index(
            s[i + 1]), b64table.index(s[i + 2]), b64table.index(s[i + 3])
        res.append(chr(((c3 << 2)) | ((c2 >> 4) & 0x03)))
        res.append(chr(((c2 & 0x0f) << 4) | ((c1 >> 2) & 0x0f)))
        res.append(chr(((c1 & 0x03) << 6) | (c0 & 0x03f)))
    if end < len(s):
        if s[-2] == b64table[-1]:
            c3, c2 = b64table.index(s[end]), b64table.index(s[end + 1])
            res.append(chr(((c3 << 2)) | ((c2 >> 4) & 0x03)))
        else:
            c3, c2, c1 = b64table.index(s[end]), b64table.index(s[end + 1]), b64table.index(s[end + 2])
            res.append(chr(((c3 << 2)) | ((c2 >> 4) & 0x03)))
            res.append(chr(((c2 & 0x0f) << 4) | ((c1 >> 2) & 0x0f)))
    return ''.join(res)

def wuaiencrypt(message):
    r = ''
    for i in list(message):
        r += chr(ord(i) ^ 0x20)
    r = RC4(r, decryptkey)
    return b64encode(r)

def wuaidecrypt(message):
    c = list(b64decode(message))
    c = list(RC4(b''.join(c), decryptkey))
    for i in range(len(c)):
        c[i] = chr(ord(c[i]) ^ 0x20)
    return ''.join(c)

enc = 'lu_BURGbkz3qtwLXBkYm'
flag = '0325008b4f37de1'

print wuaidecrypt(enc)
print wuaiencrypt(flag)

等大佬解出hash算法再做keygen吧,這個80CB的紅包還是不好拿啊。
Screenshot_2020-02-10-02-29-04-258_com.wuaipojie..png

最后

前兩天手賤把trace文件刪掉了,今天重新trace check函數,IDA花式崩,花了不少時間。剁手剁手。
附上trace和idb,trc后綴的可以在IDA里加載,另外idb貌似有點問題,附加題目會崩潰,注意一下。
idb和trace.zip (1.48 MB, 下載次數: 53)

免費評分

參與人數 103吾愛幣 +313 熱心值 +97 收起 理由
Hmiku + 1 + 1 熱心回復!
cst198926 + 1 + 1 鼓勵轉貼優秀軟件安全工具和文檔!
月六點年一倍 + 1 我很贊同!
hssl1019 + 1 + 1 謝謝@Thanks!
jjm580 + 1 + 1 我很贊同!
維C糖果 + 1 + 1 我很贊同!
Jioccer + 1 + 1 熱心回復!
zhangjunteng + 1 + 1 熱心回復!
explorer126 + 2 + 1 鼓勵轉貼優秀軟件安全工具和文檔!
此用戶無法顯示 + 2 + 1 鼓勵轉貼優秀軟件安全工具和文檔!
qq524350 + 1 謝謝@Thanks!
mda435 + 1 謝謝@Thanks!
GodIand + 1 + 1 我很贊同!
你不是一個人 + 1 + 1 熱心回復!
Lugia + 1 + 1 謝謝@Thanks!
三角心 + 1 + 1 用心討論,共獲提升!
cxfyg + 1 + 1 膜拜大佬!!!
KYO_2代 + 1 我很贊同!
padao + 1 + 1 用心討論,共獲提升!
一心即佛 + 1 + 1 感謝發布原創作品,吾愛破解論壇因你更精彩!
ZDavy + 1 + 1 謝謝@Thanks!
limpoamp + 1 + 1 謝謝@Thanks!
meino + 1 謝謝@Thanks!
15396991846 + 1 我很贊同!
莫千秋 + 1 + 1 謝謝@Thanks!
lynxtang + 1 + 1 謝謝@Thanks!
fandh88 + 1 我很贊同!
Ldcsuki + 1 + 1 謝謝@Thanks!
小哥9527 + 1 + 1 我很贊同!
wwh1004 + 3 + 1 不會安卓
jlzoe + 1 + 1 謝謝@Thanks!
sunbester + 1 + 1 感謝發布原創作品,吾愛破解論壇因你更精彩!
魔鬼視覺 + 1 + 1 熱心回復!
lmjg520 + 1 + 1 鼓勵轉貼優秀軟件安全工具和文檔!
habhab + 1 我很贊同!
越簡單越好 + 1 + 1 小白不懂
HelloJavaScript + 1 + 1 我很贊同!
青木公 + 1 + 1 謝謝@Thanks!
石碎大胸口 + 1 + 1 我很贊同!
xx666666 + 1 + 1 用心討論,共獲提升!
梁總 + 1 + 1 熱心回復!
古或郎 + 1 + 1 歡迎分析討論交流,吾愛破解論壇有你更精彩!
烤煙型蝦米 + 1 + 1 感謝發布原創作品,吾愛破解論壇因你更精彩!
gardenofida + 1 tql
517pojie + 1 + 1 我很贊同!
空靈dashu + 1 + 1 我很贊同!
努力的小和尚 + 1 + 1 我很贊同!
qazqzz + 1 + 1 謝謝@Thanks!
gaosld + 1 + 1 謝謝@Thanks!
葉雋 + 1 用心討論,共獲提升!
星夜啟程 + 1 + 1 膜拜大佬
xiaobeis500c + 1 + 1 佩服佩服
何曉 + 1 我很贊同!
虔來學習 + 1 我很贊同!
風清海藍 + 1 + 1 熱心回復!
yixi + 1 + 1 謝謝@Thanks!
jiangfeng810814 + 1 我很贊同!
抱歉、 + 1 用心討論,共獲提升!
Liufei2019 + 1 我很贊同!
水尖尖的下巴 + 1 + 1 謝謝@Thanks!
AssassinQ + 1 + 1 謝謝@Thanks!
快樂交友 + 1 + 1 熱心回復!
daniel7785 + 1 用心討論,共獲提升!
禿頭毛筆 + 1 + 1 我很贊同!
fantion + 1 + 1 我很贊同!
cnngtc + 3 + 1 凝視大佬
wujiakang + 1 + 1 膜拜大佬
meanwhile + 1 + 1 我很贊同!
iBristlecone + 1 + 1 大佬大佬
ffcc0077 + 1 我很贊同!
開心糖 + 2 + 1 膜拜大佬
yechen123 + 3 + 1 我很贊同!
Dreace + 1 + 1 用心討論,共獲提升!
plasd + 1 + 1 謝謝@Thanks!
solly + 2 + 1 謝謝@Thanks!
CrazyNut + 3 + 1 來了來了 來膜拜大佬了
oauth + 1 + 1 我很贊同!
獨行風云 + 1 + 1 膜拜大佬
maoyu + 1 + 1 熱心回復!
skywilling + 2 + 1 用心討論,共獲提升!
深天深天 + 1 + 1 膜拜大佬!
LibertyCola + 1 + 1 熱心回復!
XhyEax + 3 + 1 謝謝@Thanks!
snowfox + 1 + 1 謝謝@Thanks!
lzc090 + 3 + 1 謝謝@Thanks!
昨夜星辰恰似你 + 2 + 1 老哥牛逼
kaoyange + 1 + 1 Android大神,好厲害呀呀呀
nws0507 + 1 + 1 tql
生有涯知無涯 + 1 感謝發布原創作品,吾愛破解論壇因你更精彩!
996579747 + 1 + 1 我很贊同!
Hmily + 200 + 1 感謝發布原創作品,吾愛破解論壇因你更精彩!
wangyujie96 + 1 + 1 太強了
二娃 + 2 謝謝@Thanks!
千世櫻 + 1 + 1 強強強
1006706246 + 1 + 1 我很贊同!
wmsuper + 3 + 1 謝謝@Thanks!
wtujoxk + 2 + 1 膜拜大佬!
蘇紫方璇 + 2 + 1 tql
qwe694698196 + 1 + 1 謝謝@Thanks!
JuncoJet + 1 膜拜大佬,(我沒分了

查看全部評分

發帖前要善用論壇搜索功能,那里可能會有你要找的答案或者已經有人發布過相同內容了,請勿重復發帖。

Hmily 發表于 2020-2-10 13:10
牛叉,80cb確實太少了,寫分享再送200。
hlrlqy 發表于 2020-2-10 03:31
手撕ollvm的大佬,佩服佩服
這一手trace用的屬實驚艷
史迪仔 發表于 2020-2-10 03:15
灰灰。 發表于 2020-2-10 03:34
很強,還從沒用過ida的trace
qwesyw2008 發表于 2020-2-10 05:36
看不懂,但是大佬nb
fwmsuper 發表于 2020-2-10 07:55
感謝樓主辛苦分享
李夢潔 發表于 2020-2-10 08:02
感謝樓主辛苦分享
李夢潔 發表于 2020-2-10 08:03
感謝樓主分享
jefel 發表于 2020-2-10 08:17
高手過拆!!
kone153 發表于 2020-2-10 08:45
雖然看不懂,但還是看看多學習學習
您需要登錄后才可以回帖 登錄 | 注冊[Register]

本版積分規則 警告:本版塊禁止灌水或回復與主題無關內容,違者重罰!

快速回復 收藏帖子 返回列表 搜索

RSS訂閱|小黑屋|聯系我們|吾愛破解 - LCG - LSG ( )

GMT+8, 2020-4-3 11:48

Powered by Discuz!

广西快三Copyright © 2001-2020, Tencent Cloud.

快速回復 返回頂部 返回列表
安徽快3-推荐 重庆快3-Welcome 北京快3-欢迎您 上海快3-Home 湖北快3-安全购彩 湖南快3-广西快三 河北快3-推荐 大发11选5-推荐 河南快3-Welcome 广东快3-Home