本文为SCTF上的一道Android题的writeup。

题目描述:
1

  • Java层很简单,获取用户输入,然后调用native层的func函数,如果返回真则弹出FLAG。
  • SO有反调试,在init段的_cxa_chk_fail函数中,调用了pthread_create函数创建了新线程,在新线程中进行了反调试检测(/proc/pid/wchan),若检测到调试,则tempabc = “xctf”,m_y = 9;否则tempabc = “syc”,m_y = 6。而这两个变量都涉及到后面的算法部分,也就是说如果不知道这个反调试的地方,后面算法推出的FLAG始终是错误的。(巧妙之处就在于检测到调试器,并没有让程序直接退出,而是修改了程序算法的参数)
  • 算法没有用什么加密算法,就是异或、移位之类的,大概跟了下,不深究了。