app的简单防护
学习目标:了解一些app的防护措施,能对自己写的app做一些简单防护反编译一个app时搜索不到关键字
HTML5的App
字符串被加密了
反射调用相关类
动态加载dex
热修复
简单的字符串加密的实现dex的字符串加密可以用代码自动实现,需要使用到dexlib2这个库
若是不加任何防护,在登陆操作时,我们将密码发送给服务器,攻击者再抓包后直接反编译然后搜索password便可以定位到关键代码
package com.example.encrypt;import android.os.Build;import android.os.Bundle;import androidx.activity.EdgeToEdge;import androidx.appcompat.app.AppCompatActivity;import androidx.core.graphics.Insets;import androidx.core.view.ViewCompat;import androidx.core.view.WindowInsetsCompat;import java.security. ...
逆向分析dodonew
目标:得到”Encrypt”的算法逆向的步骤
抓包分析是否有需要逆向的字段
查壳分析是否有加固
查看界面元素,看是否是原生开发的app,以为不同形式app分析方法不一样
跑一下自吐算法插件
Hook常用系统函数来定位
找到一些疑似的函数,可以利用hook打印堆栈,来看是否调用了这些函数
关键加密代码的定位
人肉手工搜索字符串
可以搜索连接
可以搜索加密的函数
可以搜索同一个数据包中没有加密的参数名
使用查壳工具发现没有壳,抓包发现有一个加密字段:
"Encrypt": "NIszaqFPos1vd0pFqKlB42Np5itPxaNH\/\/FDsRnlBfgL4lcVxjXii\/UNcdXYMk0EQMz15fWd0AZ3\n9d4qc0ZgtMCbKF+l+FsXvqFFi4HhQ8Z56cxaZpXIUEhJ5R9IBRCtI97HMUH8l2PmJT4N+mA\/k2lT\nUTN+8LjHbtYGerEukUyVhjQHzeMCIEFbLVavcACyOG7MZVeYVISwA3hNO+DU7\/YXdymd3vpf ...
frida环境搭建
学习目标:配置好frida环境frida的安装pip install fridapip install frida-tools (安装frida-tools时,会自动安装frida)
判断frida是否安装成功cmd中执行frida --version, 能打印出版本号说明frida-tools没有问题cmd中执行python, 进入控制台import frida, 能导包成功,说明frida库没有问题
frida的卸载pip uninstall fridapip uninstall frida-tools
frida安装指定版本先安装指定版本的frida,再安装指定版本的frida-tools
pip install frida==14.2.18pip install frida-tools==9.2.5旧版的要下载.egg文件然后安装D:\Python38\python.exe -m easy_install frida-14.2.18-py3.8-win-amd64.egg
frida-tools版本的查看
https://github.com/frida/frida/r ...
Matlab快速入门
学习目标: 了解matlab基础操作赋值a = 1a = 2
注释% a = 1多行注释,快捷键Ctrl + R取消注释,快捷键Ctrl + T
清除工作区所有变量clear
清屏clc
输出和输入函数disp函数disp('你好世界')a = [1, 2, 3]disp(a)
input函数a = input('请输入考试分数')
判断语句a = input('请输入考试分数:')if a >= 85 disp("成绩合格")elseif a >= 60 disp("成绩合格")else disp("成绩挂科")end
字符串合并字符串% 方法一:stractstrcat('字符串1', '字符串2');% 方法二:[str1, str2, 、、、strn]或[str1 str2 、、、 strn]['字符串1', '字符串2'][' ...
密码学Java
学习目标:了解一些常见的密码学算法Hex编码什么是Hex编码Hex编码是一种用16个字符表示任意二进制数据的方法。它是一种编码,而非加密算法
java代码如下:
package org.example;import com.sun.org.apache.xerces.internal.impl.dv.util.HexBin;//TIP To <b>Run</b> code, press <shortcut actionId="Run"/> or// click the <icon src="AllIcons.Actions.Execute"/> icon in the gutter.public class Main { public static void main(String[] args) { String name = "许之少年凌云志, 曾许人间第一流"; byte[] bytes = name.getBytes( ...
创建releaseAPK
学习目标:编译出release版本的apk创建证书
选择apk
选择Create new…
填写信息
Key store path : 签名文件路径Password : 签名密码Confirm : 确认密码Alias : 别名Validity ( years ) : 有限期 (年)First and Last Name : 全名Organizational Unit : 组织单位Organization : 组织City or Locality : 城市或地方State or Province : 州或省Country Code(XX) : 国家代码
将Build Variants改成release
配置Project Structure相关信息
配置Signing Configs
创建完了以后点击ok或者apply
应用点击Build Variants,使用刚刚配置的Signing Configs
点击ok或者apply
最后再在Build -> Generate…..进行创建release 版本的apk
Android基本控件使用
学习目标:掌握Button、Log、Toast、EditText的几种常见使用方式Button方式一:直接在布局文件当中添加<?xml version="1.0" encoding="utf-8"?><androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".Mai ...
AndroidStudio工程目录结构
学习目标:了解AndroidStudio工程目录结构gradle -> wrapper -> gradle-wrapper.properties配置项目gradle版本
build.gradle描述工程整体的编译规则
gradle.propertiesgradle配置文件,一般无须改动
local.properties本机环境配置,SDK、NDK路径等,一般无需改动
setteings.gradle配置哪些模块在一起编译
include ':app' 只编译app
app -> build.gradle描述当前模块的编译规则
plugins { id 'com.android.application'}android { //指定编译用的SDK版本号 compileSdkVersion 30 //指定编译工具的版本号,开头两位数字必须与compileSdkVersion一致。具体版本号可在sdk安装目录 SDK\build-tools 下找到 buildToolsV ...
Android常见目录
学习目标:了解安卓常见目录data/data目录
存放用户app数据的目录,每个app都有自己的目录,以包名命名
这是一个私有目录,app只能访问各自的目录,除非root权限
该目录下的文件,要pull到电脑上来,通常先拷贝到sdcard目录
data/app目录
用户安卓的app存放在这个目录下
data/local/tmp
临时目录,权限比较大
system/app目录
存放系统自带的app
system/lib、system/lib64目录
存放app用到的系统so文件
system/bin目录
存放shell命令
sd卡目录
不管手机有没有存储卡都会有这个目录
app操作sdka目录需要申请权限,不同系统版本要求不同
访问以下几个目录效果都一样
/sdcard -> /storage/self/primary/mnt/sdcard/storage/emulated/0