乱码三千 – 分享实用IT技术

乱码三千 – 码出一个新世界


  • 首页

  • 归档

  • 搜索

如何执行smali代码

发表于 2020-12-08

java代码的执行需要编译成字节码文件然后借助java虚拟机JVM执行, 那么smali代码的执行同样需要借助虚拟机, 只不过是安卓虚拟机DalvikVM, 但是由于Dalvik虚拟机默认识别dex文件, 因此需要将smali文件封装成dex文件

1.创建smali文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
.class public LTest;
.super Ljava/lang/Object;

.method public constructor <init>()V
.registers 1


invoke-direct {p0}, Ljava/lang/Object;-><init>()V

return-void
.end method

.method public static main([Ljava/lang/String;)V
.registers 3


sget-object v0, Ljava/lang/System;->out:Ljava/io/PrintStream;

const-string v1, "Hello Pangshu!"

invoke-virtual {v0, v1}, Ljava/io/PrintStream;->println(Ljava/lang/String;)V

return-void
.end method

2.smali文件转dex(或者打包成Apk也一样)

1
java -jar smali-2.4.0.jar a smali文件或目录 -o 输出目录/xxx.dex

3.将dex传至android设备中(真机或者模拟器)

1
adb push test.dex /sdcard/

4.调用Dalvik VM执行代码

1
2
3
adb shell

dalvikvm -cp /sdcard/test.dex Test

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

汇编学习之大小端模式

发表于 2020-12-07

作用

概念

  • 大端模式: 是指数据的高字节保存在内存中的低地址中, 而数据的低字节保存在内存的高地址中(高低/低高)(Big Endian)
  • 小端模式: 是指数据的高字节保存在内存中的高地址中, 而数据的低字节保存在内存的低地址中(高高/低低)(Little Endian)

ARM既可以工作在大端,也可工作在小端模式

8086学习之关于数据段的取值和赋值

发表于 2020-12-07

前言

数据段存在的意义是为了告诉cpu, 该段物理地址存放的是数据而不是指令

那么既然里面存放的是数据, 势必会有取值和赋值

取值

将20001H物理地址中的数据取值然后填入通用寄存器中, 如下:

1
2
3
mov ax ,2000H
mov ds ,ax
mov ax,[1] #[1]等同于 2000H:1H

以上有几个关键的地方需要记忆

  • []内数字表示偏移地址, 默认将DS设为基地址
  • 必须先声明段地址 也就是必须先给ds赋值
  • 通用寄存器相当于临时变量ax,bx,cx,dx….. 任选 ,只要避免冲突即可

赋值

将BH中的数据赋值给数据物理地址20001H中, 如下:

1
2
3
4
mov bh,30H
mov ax ,2000H
mov ds ,ax
mov [1] ,bh

和取值类似, 反过来即可

注意

  1. 在代码段CS:IP中, cpu读取的内存地址宽度是更具代码所占的字节数据而定, 那么在数据段DS中,如何确定读取多少个字节的数据呢?

以取值代码为例:

1
2
3
mov ax ,2000H
mov ds ,ax
mov ax,[1]

如果物理地址和数据一一对应关系如下:

1
2
3
4
20001H----->23
20002H----->11
20003H----->53
20004H----->71

那么ax中的值是多少呢?

答案是1123 而不是23, 为什么?

这是根据寄存器容器大小决定的, 容器大装得多, 容器小装的小, 因为ax是16位容器,那么则获取16位也就是两个字节的数据,即1123, 如果是ah或者al接收的话则获取8位也就是一个字节的数据,即23

  1. mov 内存单元:内存单元是不允许的, 比如mov [0],[1]

8086学习之jump指令

发表于 2020-12-06

作用

用于更改CS:IP的值

由于在8086cpu中更改段寄存器CS和指针寄存器IP的值不能直接使用mov赋值, 比如:

1
2
3
mov CS,3000H

mov IP, 0001H

以上写法不允许

那么, 如果我们需要给其赋值时, 其中一种替代方案就是使用jump指令,比如:

1
jump 3000H:0001H # 跳转到该代码段物理地址

如果段地址保持不变, 只是更改偏移地址, 那么需要借助通用寄存器, 如下:

1
2
3
mov ax,0002H
jump 3000H:0001H
jump ax #等同于jump 3000H:0002H

则只需jump+保存偏移地址的寄存器 这种写法即可

注意不能直接jump 0002H 这样是不允许的

关于Git版本回退的几种方法

发表于 2020-11-17

如果已经commit 想要回退

版本回退

1
git reset --hard HEAD^   //一个^代表一个版本 如果回退两个版本那就HEAD^^ 以此类推

指定版本/版本穿梭

1
git reset --hard 8383f01   //一个^代表一个版本 如果回退两个版本那就HEAD^^ 以此类推

如果还没有commit

第一种 使用reset回退到当前版本初始状态

1
git reset --hard HEAD

第二种 使用checkout

1
2
git reset checkout . //放弃所有文件的修改
git reset checkout 指定相应文件

第三种 使用stash

1
git stash  //暂存当前修改的代码

第四种 使用revert重做

1
git revert -n 版本号

本文为作者原创 转载时请注明出处 谢谢

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

关于Git打标签Tag分支

发表于 2020-11-17

分支管理

查看当前标签

1
git tag

在本地代码仓库给项目打上一个标签

1
git tag -a v1.0 -m "version 1.0"

将标签推送到远程仓库

1
git push origin v1.0

检出v1.0标签

1
git checkout origin v1.0

从检出状态创建v1.0bugfix分支

1
git checkout -b bugfix1.0

查看远程分支

1
git branch -r

删除远程分支

1
git branch -r -d origin/bugfix1.0

本文为作者原创 转载时请注明出处 谢谢

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

python金融量化交易

发表于 2020-11-17

量化投资绝对是一个趋势

免费数据回测平台

  • 米筐 www.ricequant.com
  • 聚宽 https://www.joinquant.com/

相关代码

以米筐api为例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
 #需求: 获得市盈率大于50且小于65, 营业总收入前10的股票
# 每日调仓
def init(context):

# 沪深300
context.hs300_list=index_components("000300.XSHG")

# 在context中保存全局变量
context.s1 = "000001.XSHE"
# 实时打印日志
logger.info("RunInfo: {}".format(context.run_info))

# 开启定时器 按月调仓
# scheduler.run_monthly(getdata,tradingday=1)


def getdata(context, bar_dict):
# 在一号的时候 先执行before_trading 然后执行getdata定时任务方法 最后执行handle_bar
q=query( fundamentals.eod_derivative_indicator.pe_ratio,fundamentals.income_statement.revenue).filter(
fundamentals.eod_derivative_indicator.pe_ratio>50
).filter(
fundamentals.eod_derivative_indicator.pe_ratio>65

).order_by(
fundamentals.income_statement.revenue.desc()

).filter(
# 在指定的股票池当中选择
fundamentals.stockcode.in_(context.hs300_list)

).limit(10)
found=get_fundamentals(q)
# 格式化显示
logger.info(found.T)
# 将第一列股票代码 放候选表中
context.stock_list=found.T.index

# before_trading此函数会在每天策略交易开始前被调用,当天只会被调用一次
def before_trading(context):
# 选股 获得市盈率大于50且小于65, 营业总收入前10的股票
q=query( fundamentals.eod_derivative_indicator.pe_ratio,fundamentals.income_statement.revenue).filter(
fundamentals.eod_derivative_indicator.pe_ratio>50
).filter(
fundamentals.eod_derivative_indicator.pe_ratio>65

).order_by(
fundamentals.income_statement.revenue.desc()

).limit(10)
found=get_fundamentals(q)
# 格式化显示
logger.info(found.T)
# 将第一列股票代码 放候选表中
context.stock_list=found.T.index


# 你选择的证券的数据更新将会触发此段逻辑,例如日或分钟历史数据切片或者是实时数据切片更新
def handle_bar(context, bar_dict):
# 先判断仓位是否有股票 如果有,卖出不符合条件的股票
if len(context.portfolio.positions.keys())!=0:
for stock in context.portfolio.positions.keys():
if stock not in context.stock_list:
#如果持有的股票不在新股票池中, 卖出
order_target_percent(stock,0)
# 买入最新股票池中的10只股票 等比买入
for new_stock in context.stock_list:
order_target_percent(new_stock,1/len(context.stock_list))


# after_trading函数会在每天交易结束后被调用,当天只会被调用一次
def after_trading(context):
pass

本文为作者原创 转载时请注明出处 谢谢

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

短视频拍摄手法大致有哪些

发表于 2020-11-17

推

说明: 视频拍摄中常用的手法之一, 是指把手机或相机慢慢想拍摄主体推进, 常用于烘托氛围或者强调某个人/事/物

拉

说明: 是指把手机或者相机慢慢向后拉, 使拍摄主体在画面中慢慢变小, 常用于向观众张氏拍摄主体所处的环境

摇

说明: 是只拍摄者拍摄机位不懂(站在原地), 通过摇动手机臂带动手机/相机呈弧线运动

移

说明: 通常是指在水平方向, 按一定运动轨迹进行运动拍摄, 是一种侧面跟拍人物的表现手法

跟

说明: 通常是指在物体后方一直跟着拍摄主体进行拍摄

升

说明: 通常是指在手机由下往上进行拍摄, 这种拍摄方式是展现拍摄氛围的绝佳手段

降

说明: 通常是指在手机由上往下进行拍摄, 这种拍摄方式是拍摄光晕的首选

旋转

说明: 通常是指被拍摄物是圆形的中心点, 手机按一定半径围绕圆心点进行旋转

静

说明: 镜头固定 适合知识类型讲解的画面

本文为作者原创 转载时请注明出处 谢谢

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

Charles抓取Https请求的相关配置Windows篇

发表于 2020-11-17

第一步添加SSL代理配置

添加代理主机

第二步 添加根证书

最后重启Charles即可抓包

补充

1.Charles Map rRemote

关于https的抓包, 我们在使用charles工具时还可以使用它的路径映射功能, 也就是自动将https替换成http协议

image-20220805142316685

image-20220805142357260

2.反编译全局替换

另外, 如果你是为了给App抓包, 刚好在反编译该App, 在条件允许的情况下, 可以在反编译smali后,批量对源码中的https进行替换 然后重新打包, 效果也不错

3.使用模拟器抓包

有些网站在手机上可以访问但是在电脑浏览器无法访问 大家懂的, 此时我们若通想通过浏览器控台提取相应的资源无法实现, 而且真机上的浏览器默认屏蔽了一部分https抓包功能 尤其是Android7.0以上版本机器

此时 我们可以考虑使用模拟器 比如网易模拟器 默认配备了Android6.0的系统, 低版本的系统相对来说限制要少很多

本文为作者原创 转载时请注明出处 谢谢

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

Android进阶之逆向安全反编译视频教程-胖薯出品

发表于 2020-11-06

适用人群

  • 对安卓逆向反编译有兴趣的同学
  • 安卓逆向从业者

课程要求

适用于有安卓开发基础的同学

课程概述

学完本课程后可以实现对App进行逆向破解操作, 其中包括:

  1. app内容篡改
  2. app运行流程篡改
  3. app数据拦截和替换
  4. https数据拦截以及xposed hook操作

课程特色

15课时 帮你快速入门安卓逆向反编译

课程亮点

  • 适合新手入门 只要有一定的安卓开发基础就能快速掌握

  • 内容清晰循序渐进 不拖沓 全程干货

  • 配套工具 快速上手 一边学习一边实战

课程大纲

  • 第一部分: 反编译工具的基本介绍和使用

  • 第二部分: App启动入口替换

  • 第三部分: Https请求抓包

  • 第四部分: JNI数据分析

课程观看

  • 网易云课堂
  • 51CTO课堂
  • 面包多付费观看
  • Udemy课堂
  • B站免费观看
  • YouTube观看
  • 淘宝/拼多多赞助观看

作者介绍

移动端讲师、作家、开发者、独立音乐人

《smali语言从门到精通》《安卓进阶之逆向安卓反编译从0到1》《硬件进阶之三大架构汇编语言入门》系列视频作者 九年移动开发经验 旨在将复杂的事情简单化

欢迎大家来学习 一块进步~

1b954d951bca464294b5761a77fae70d

本文为作者原创 转载时请注明出处 谢谢

乱码三千 – 点滴积累 ,欢迎来到乱码三千技术博客站

1…293031…48

乱码三千

android程序员一枚,擅长java,kotlin,python,金融投资,欢迎交流~

479 日志
139 标签
RSS
© 2024 乱码三千
本站总访问量次
由 Hexo 强力驱动
|
主题 — NexT.Muse v5.1.4
0%