iscc2016 mobile1-TurtleShell.apk解题过程

拿到程序先运行,简单的验证输入的flag正确与否。jeb加载apk文件

实在库文件里面验证,所以ida加载之,so文件是加密的,所以看不到关键验证函数,百度搜了下libhackme.so,出来这篇文章:

http://burningcodes.net/so%E5%8A%A0%E5%9B%BA%E7%B3%BB%E5%88%97%E4%B9%8B%E8%BF%90%E8%A1%8C%E6%97%B6%E8%A7%A3%E5%AF%86/

看了下调用的函数,可以确定这个so文件就是文章里面所述的加解密方法,加密修改elf头的e_entry和e_shoff字段分别为要加密section的偏移和大小,然后那个section简单的移位操作,运行时解密通过elf头文件的这两个值定位待解密section,然后恢复section到内存中,所以通过dump程序运行时加载的so文件就能得到解密和的so。具体过程如下:

然后就可以分析so文件的关键函数了:

dump出的文件拿到ida加载可以看到关键函数crackme,里面调用了bingmeiyoushenmeluanyong函数(然而是有用的),算法很简单,前16位已经给出,后16位替换下就行。

时间: 05-23

iscc2016 mobile1-TurtleShell.apk解题过程的相关文章

深度探究apk安装过程

一.先验知识 0.PcakageaManagerService版本变化 1.概述 2.PackageManagerService服务启动流程 3. PackageManagerService入口 二.四种安装方式 1.系统应用安装2.网络下载应用安装3. ADB工具安装 4.第三方应用安装 三.总结 概述 1.1概述 众所周知,Android应用最终是打包成.apk格式(其实就是一个压缩包),然后安装至手机并运行的.APK即Android Package的缩写. Android系统在启动的过程中

Android学习--apk打包过程

1. 使用aapt工具,给所有的res目录下的资源文件生成对应的id,id会被放进R.java文件中 2. JavaC编译器,将所有Java文件转换为Class文件,其中,内部类会分别生成.class文件,命名格式为MainActivity$内部类.class R$String.class等 3. 将class中的公共常量提取出来,生成dex文件 4. aapt将生成的menifest+dex+resource+程序签名打包成zip格式,其实就是apk格式.说明,META-INF是程序签名信息

中国电信翼支付2014编程大赛决赛-一种排序 个人解题过程

首先需要表明的是我在时限内想到这个解法,但是这个解法被判错,而我也想不到反例.赛后咨询举办方的时候,他们表示过几天会发测试数据给我们.所以今天就先把思路和代码先放上来,过几天收到数据再看看到底哪里错了. 如果有读者想到相应的反例,希望可以给我留言,谢谢. 题目详情(只限Java) 给定一串整数,你只能进行两种操作:任选一个整数放到这串数之前,或者这串之后.所有的整数都不相等. 问把这串整数变为由小到大的排好序最少需要的操作次数. 输入格式: 多组数据,每组数据1行,包含若干个空格分隔的非负整数,

解题过程一般描述

#COGS#1155. 最大乘积#啊,我怎么可能会写题解#可能充满误导和错误的解题过程。#

//写在前面:手抖,MinGW里删除汉字要两次.外加,参考了别人的写法,啊,好机智啊. 题面:一个正整数一般可以分为几个互不相同的自然数的和,如3=1+2,4=1+3,5=1+4=2+3,6=1+5=2+4,…. 现在你的任务是将指定的正整数n分解成若干个互不相同的自然数的和,且使这些自然数的乘积最大. 输入是一个正整数n在3到10000之间,拆分之后累乘起来蛮大的要高精,然后long long只能过三个点,看那一大堆带﹣号的输出很吓人. 恩本来没仔细看题目,以为就是拆分然后乘积最大,于是就拆成

Android内核开发:浅析APK的安装过程

本文是<Android内核>开发系列文章的第十篇,上一阶段,我们重点学习和分析了Android系统的启动过程,那么,从本文开始,准备介绍一下如何从Android源码中添加.修改.删除系统级别的APP应用.作为开篇,我们先从简单的理论入手,介绍一下Android系统中的APK文件究竟是个什么东西?它是如何安装到系统中去的? 我们在学习和了解一项新事物的时候,最快速的方法往往是与已知的事物进行比较,因此,我们首先来简单聊一聊Windows应用程序的安装过程. 1.  一般Windows应用程序的安

SzNOI之d100题解题报名,日历问题

SzNOI之d100题解题报名,日历问题 d100: 神仙?妖怪?谢谢! 这题的题目有点古怪.解题过程,且慢慢道来. 搞懂这题,算日历,周几等问题,基本都搞清了. 一.几年有几天 二.到今天有几天 三.打印日历 一.几年有几天 从公元一年,到公元n年,共有几天? 这问题似乎相当简单,因为一年有365嘛.比如公元一年,到公元二年,这样算: var y,day:longint; begin y:=2; // 10 day:=y*365; writeln(day); end. 算下来,似乎一点错误也木

SICP 习题 (1.45)解题总结

SICP 习题 1.45是对前面很多关于不动点的习题的总结. 题目回顾了我们之前在1.3.3节使用的不动点寻找方法,当寻找y -> x/y 的不动点的时候,这个变换本身不收敛,需要做一次平均阻尼才可以. 对于y -> x/(y^2)这个变换也可以通过一次平均阻尼使它变得收敛. 不过一次平均阻尼对于四次方程是不够的,就是说,对y -> x/(y^3)这样的变换,一次平均阻尼不足以使它收敛,需要做两次平均阻尼才行. 题目遵从一直以来的抽象原则,要求我们去多做几次测试,找出 y -> x

使用python 3.x 对pythonchallenge-----14的解答过程

pythonchallenge-14地址 : http://www.pythonchallenge.com/pc/return/italy.html 题目解析:获取的信息有 ①图片是一个便便一样的面包 ②源代码中有信息如下 <!-- remember: 100*100 = (100+99+99+98) + (... --> ③页面存在一个wire.png的图片,解析后得出图片的像素未1*10000 分析题意,按2中的方法将3中的图片分解,然后按一图片意思,旋转着保存在图片中..如:第100个像