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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

CTF的一道安卓逆向

發(fā)布時間:2025/7/25 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CTF的一道安卓逆向 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?

前幾天打CTF時遇到的一道安卓逆向,這里簡單的寫一下思路

?

  • 首先用jadx打開apk文件,找到simplecheck處(文件名是simplecheck),可以看到基本邏輯就是通過函數(shù)a對輸入的內(nèi)容進行判斷,如果正確就彈出You get it。

?

  • 我們?nèi)ヮ恆里看一下可以發(fā)現(xiàn)這個就是一道簡單的算法

?

  • 判斷的條件就是在這一個循環(huán)里,可以看到成功的條件是,而iArr[]為flag :

a[i2]== b[i2] * iArr[i2]* iArr[i2] + c[i2] * iArr[i2] + d[i2]?

a[i2 + 1] == b[i2] * iArr[i2 + 1] * iArr[i2 + 1] + c[i2] * iArr[i2 + 1] + d[i2]

1 int i2 = 0; 2 while (i2 < c.length) 3 { 4 if (a[i2] != (((b[i2] * iArr[i2]) * iArr[i2]) + (c[i2] * iArr[i2])) + d[i2] || a[i2 + 1] != (((b[i2] * iArr[i2 + 1]) * iArr[i2 + 1]) + (c[i2] * iArr[i2 + 1])) + d[i2]) 5 { 6 return false; 7 } 8 i2++; 9 } 10 return true;

?

?

  • 用python進行爆破

a.length指出flag的長度為35個,并且第一個值賦值為0,所以第一個循環(huán)從1到34。并且iArr[]里是byte,java中byte的范圍從-128到127,所以第二個循環(huán)是0到127(ASCII從0開始)

1 int[] iArr = new int[a.length]; 2 iArr[0] = 0;

?

判斷條件進行變化,使iArr變成一個變化值f,所以判斷條件變?yōu)?#xff1a;

(a[m] == b[m-1] * f * f + c[m-1] * f + d[m-1]) (a[m] == b[m] * f * f + c[m] * f + d[m])

?

最后的爆破程序是

1 a= [0, 146527998, 205327308, 94243885, 138810487, 408218567, 77866117, 71548549, 563255818, 559010506, 449018203, 576200653, 307283021, 467607947, 314806739, 341420795, 341420795, 469998524, 417733494, 342206934, 392460324, 382290309, 185532945, 364788505, 210058699, 198137551, 360748557, 440064477, 319861317, 676258995, 389214123, 829768461, 534844356, 427514172, 864054312] 2 b= [13710, 46393, 49151, 36900, 59564, 35883, 3517, 52957, 1509, 61207, 63274, 27694, 20932, 37997, 22069, 8438, 33995, 53298, 16908, 30902, 64602, 64028, 29629, 26537, 12026, 31610, 48639, 19968, 45654, 51972, 64956, 45293, 64752, 37108] 3 c= [38129, 57355, 22538, 47767, 8940, 4975, 27050, 56102, 21796, 41174, 63445, 53454, 28762, 59215, 16407, 64340, 37644, 59896, 41276, 25896, 27501, 38944, 37039, 38213, 61842, 43497, 9221, 9879, 14436, 60468, 19926, 47198, 8406, 64666] 4 d= [0, -341994984, -370404060, -257581614, -494024809, -135267265, 54930974, -155841406, 540422378, -107286502, -128056922, 265261633, 275964257, 119059597, 202392013, 283676377, 126284124, -68971076, 261217574, 197555158, -12893337, -10293675, 93868075, 121661845, 167461231, 123220255, 221507, 258914772, 180963987, 107841171, 41609001, 276531381, 169983906, 276158562] 5 6 flag=""; 7 for m in range(1,34): 8 for f in range(0,127): 9 if (a[m] == b[m] * f * f + c[m] * f + d[m]) | (a[m] == b[m-1] * f * f + c[m-1] * f + d[m-1]) : 10 flag+=chr(f) 11 break 12 else: 13 pass 14 print(flag+"}")

?

  • 結(jié)果為

?

Simplecheck.apk

?

轉(zhuǎn)載于:https://www.cnblogs.com/QKSword/p/8676812.html

總結(jié)

以上是生活随笔為你收集整理的CTF的一道安卓逆向的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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