[SWPU2019] Android2
一开始拿到apk直接丢到工具里,结果什么都没有,7zip打开之后才发现
,真正的apk还在里面,要解压出来才行
这个flag是假的。
库中提醒重设游戏时间,这时候看到Java源代码

有一个超长的线程延迟和永远为假的判断条件,应该就是要修改这两点。
使用apktool反编译apk之后,直接打开MainActivity.smali文件,找到1000000000的16进制0x3b9aca00
,只需要修改所有的这个16进制即可,这里修改为0xa,以及
这里的也要改,这里是内部类里的判断条件
全部改完之后使用apktool重新打包并签名,安装到模拟器里

这样在进入程序就会输出内容了,提示flag是之前的假flag的加密结果
在ida中
看到了依赖文件里有md5和decode函数,先用md5试了一下,不正确,那么大致思路就是通过decode函数来逆出encode函数出来将flag{WeLcome_to-SWPU}}进行加密,先看源代码:
char *__fastcall decode(char *a1, int a2) { int i; // [xsp+10h] [xbp-10h] for ( i = 0; i < (unsigned __int64)strlen(a1); ++i ) { if ( (unsigned __int8)a1[i] < 0x41u || (unsigned __int8)a1[i] > 0x5Au ) { if ( (unsigned __int8)a1[i] >= 0x61u && (unsigned __int8)a1[i] <= 0x7Au ) a1[i] = ((unsigned __int8)a1[i] - 97 + a2) % 26 + 97; } else { a1[i] = ((unsigned __int8)a1[i] - 65 + a2) % 26 + 65; } } return a
不难发现,解密只针对了字母进行加密,符号和数字被排除在外了,而且大写字母只会变成大写字母,小写字母只会变成小写字母,但是有一个a2未知数在捣乱,需要利用26次循坏,每个结果挨个尝试才可以,代码如下:
s = "flag{WeLcome_to-SWPU}}" for x in range(0,26): for v in s: if v >= "A" and v <= "Z": v = chr(((ord(v) - 65) - x)%26 + 65) if v >= "a" and v <= "z": v = chr(((ord(v) - 97) - x)%26 + 97) print(v,end="") print()
得到的结果为:
flag{WeLcome_to-SWPU}}
ekzf{VdKbnld_sn-RVOT}}
djye{UcJamkc_rm-QUNS}}
cixd{TbIzljb_ql-PTMR}}
bhwc{SaHykia_pk-OSLQ}}
agvb{RzGxjhz_oj-NRKP}}
zfua{QyFwigy_ni-MQJO}}
yetz{PxEvhfx_mh-LPIN}}
xdsy{OwDugew_lg-KOHM}}
wcrx{NvCtfdv_kf-JNGL}}
vbqw{MuBsecu_je-IMFK}}
uapv{LtArdbt_id-HLEJ}}
tzou{KsZqcas_hc-GKDI}}
synt{JrYpbzr_gb-FJCH}}
rxms{IqXoayq_fa-EIBG}}
qwlr{HpWnzxp_ez-DHAF}}
pvkq{GoVmywo_dy-CGZE}}
oujp{FnUlxvn_cx-BFYD}}
ntio{EmTkwum_bw-AEXC}}
mshn{DlSjvtl_av-ZDWB}}
lrgm{CkRiusk_zu-YCVA}}
kqfl{BjQhtrj_yt-XBUZ}}
jpek{AiPgsqi_xs-WATY}}
iodj{ZhOfrph_wr-VZSX}}
hnci{YgNeqog_vq-UYRW}}
gmbh{XfMdpnf_up-TXQV}}
用flag{}包裹之后挨个提交尝试之后,竟然都不正确!!!!
那么我就将前面的都改成flag,又尝试了一次,还是不对!!!!
最后再删除一个}符号,终于找到了结果为flag{BjQhtrj_yt-XBUZ},由kqfl{BjQhtrj_yt-XBUZ}}变换而来

浙公网安备 33010602011771号