update slides
Some checks failed
/ test_checkout (push) Failing after 35s

This commit is contained in:
Jean-Marie 'Histausse' Mineau 2025-12-01 00:22:53 +01:00
parent 21c2a58f3c
commit 0fd8b495c0
Signed by: histausse
GPG key ID: B66AEEDA9B645AD2
2 changed files with 66 additions and 84 deletions

View file

@ -91,8 +91,8 @@
columns: (1fr, 1fr), [ columns: (1fr, 1fr), [
#image("slides/imgs/google.png", width: 200pt) #image("slides/imgs/google.png", width: 200pt)
- Smartphones are computers - Smartphones are computers
- Android = linux + Android Runtime - Android = Linux + Android Runtime (ART)
- APK = computer program - APK = computer program (Java-ish)
], ],
//image("slides/imgs/phone.png", height: 350pt) //image("slides/imgs/phone.png", height: 350pt)
ico.phone( ico.phone(
@ -1247,7 +1247,7 @@
table.hline(), table.hline(),
table.cell(colspan: 5, inset: 3pt)[], table.cell(colspan: 5, inset: 3pt)[],
[Jadx], hide[1.5.0], [#ko], [#ok], [#ok], [Jadx], hide[1.5.0], text(fill: orange)[#warn], [#ok], [#ok],
[Apktool], hide[2.9.3], [#warn], [#ok], [#ok], [Apktool], hide[2.9.3], [#warn], [#ok], [#ok],
[Androguard], hide[4.1.2], [#ko], [#ok], [#ok], [Androguard], hide[4.1.2], [#ko], [#ok], [#ok],
[Flowdroid], hide[2.13.0], [#ko], [#ko], [#ok], [Flowdroid], hide[2.13.0], [#ko], [#ko], [#ok],
@ -1264,7 +1264,7 @@
#v(-1em) #v(-1em)
#link("https://github.com/androguard/androguard/pull/1149")[androguard/pull/1149] \ #link("https://github.com/androguard/androguard/pull/1149")[androguard/pull/1149] \
#link("https://github.com/soot-oss/soot/pull/2211")[soot/pull/2211] (#text(fill: green)[merged])\ #link("https://github.com/soot-oss/soot/pull/2211")[soot/pull/2211] (#text(fill: green)[merged])\
#link("https://github.com/skylot/jadx/pull/2702")[jadx/pull/2702] #link("https://github.com/skylot/jadx/pull/2702")[jadx/pull/2702] (#text(fill: orange)[\~merged])
] ]
] ]
@ -1414,7 +1414,7 @@
#v(2em) #v(2em)
#uncover(3)[ #uncover(3)[
- Phone with adb enable: actuall hardware - Phone with adb enable: actual hardware
- Human: intelligent button clicker - Human: intelligent button clicker
] ]
] ]
@ -1438,58 +1438,6 @@
#get_figure(<fig:th-inserting-dex>) #get_figure(<fig:th-inserting-dex>)
] ]
/*
#for i in range(4) {
// TODO: plutot barrer les lignes au lieux de les remplacer
if i != 0 { counter("logical-slide").update( n => n - 1 ) }
slide(
title: [Transformation: Reflection],
//foreground: ghost-6(x: 80%, y: 15%, mirror: true)
)[
#show: yes-codly
#set align(center+horizon)
#if i == 1 {
codly(
highlighted-lines: (6,),
..default-codly
)
} else if i == 3 {
codly(
offset: 5,
..default-codly
)
} else {
codly(..default-codly)
}
#if i in (0, 1) {
```java
ClassLoader cl = MainActivity.class.getClassLoader();
Class clz = cl.loadClass("Reflectee");
Object obj = clz.newInstance();
Method mth = clz.getMethod("myMethod", String.class);
Object[] args = {(Object)"an argument"};
String retData = (String) mth.invoke(obj, args);
```
} else if i == 2{
```java
ClassLoader cl = MainActivity.class.getClassLoader();
Class clz = cl.loadClass(getFromInternet());
Object obj = clz.newInstance();
Method mth = clz.getMethod(getFromInternet(), String.class);
Object[] args = {(Object)getFromInternet()};
String retData = (String) mth.invoke(obj, args);
```
} else {
```java
String retData = (String) mth.invoke(obj, args);
```
}
]
}*/
#for i in range(7) { #for i in range(7) {
if i != 0 { counter("logical-slide").update( n => n - 1 ) } if i != 0 { counter("logical-slide").update( n => n - 1 ) }
@ -1612,21 +1560,22 @@
} }
)[ )[
#set align(center+horizon) #set align(center+horizon)
#theseus-outline() #theseus-outline(labels: true)
#place( #place(
bottom+left, bottom+left,
dx: -20pt, dx: -25pt,
dy: -360pt, dy: -335pt,
box[ box({
#for i in range(3) { for i in range(3) {
place( place(
dx: i*10pt, dx: i*10pt,
dy: i*10pt, dy: i*10pt,
ico.apk(height: 60pt, fill: red) ico.apk(height: 60pt, fill: red)
) )
} }
#place(dy: 85pt)[*RASTA*] set text(weight: "semibold", fill: luma(30%))
] place(dy: -1.5em)[*RASTA*]
})
) )
#arrow( #arrow(
stroke: 6pt + black, stroke: 6pt + black,
@ -1649,7 +1598,7 @@
dy: -50pt, dy: -50pt,
ellipse( ellipse(
width: 100pt, width: 100pt,
height: 300pt, height: 310pt,
stroke: 10pt + pirat-color.red, stroke: 10pt + pirat-color.red,
) )
) )
@ -1662,21 +1611,22 @@
} }
)[ )[
#set align(center+horizon) #set align(center+horizon)
#theseus-outline() #theseus-outline(labels: true)
#place( #place(
bottom+left, bottom+left,
dx: -20pt, dx: -25pt,
dy: -360pt, dy: -335pt,
box[ box({
#for i in range(3) { for i in range(3) {
place( place(
dx: i*10pt, dx: i*10pt,
dy: i*10pt, dy: i*10pt,
ico.apk(height: 60pt, fill: red) ico.apk(height: 60pt, fill: red)
) )
} }
#place(dy: 85pt)[*RASTA*] set text(weight: "semibold", fill: luma(30%))
] place(dy: -1.5em)[*RASTA*]
})
) )
#arrow( #arrow(
stroke: 6pt + black, stroke: 6pt + black,
@ -1802,7 +1752,7 @@
} }
)[ )[
#set align(center+horizon) #set align(center+horizon)
#theseus-outline(stage: "theseus-vs-static") #theseus-outline(stage: "theseus-vs-static", labels: true)
] ]
#for i in range(3) { #for i in range(3) {
@ -1899,7 +1849,7 @@
- Our dynamic analysis is questionable - Our dynamic analysis is questionable
- The dynamically loaded bytecode we intercepted is *mainly telemetry and advertisement* related - The dynamically loaded bytecode we intercepted is *mainly telemetry and advertisement* related
] ]
#only("4-", underline[Software Contributions:]) #uncover("4-", underline[Software Contributions:])
#item-by-item(start: 5)[ #item-by-item(start: 5)[
- *Androscalpel*: rust crate to *parse, modify and generate bytecode* - *Androscalpel*: rust crate to *parse, modify and generate bytecode*
- *Theseus*: tool implementing the method presented here - *Theseus*: tool implementing the method presented here
@ -1908,6 +1858,27 @@
#new-section-slide([Conclusion]) #new-section-slide([Conclusion])
#slide(title: [Experimentations])[
#import "lib.typ": num
#set align(center+horizon)
#table(
columns: 4,
inset: 0.5em,
stroke: (x, y) => (
y: if y != 0 and y != 5 and (x, y) != (0, 3) { 1pt } else { none },
left: if x != 0 { 1pt } else { none },
),
table.header[][Experiment][Number of APKs][Time],
[RASTA], [20 static analyses], num(62525), [2 months],
[Class Loading], [1 static analysis], num(49975), [1 week],
table.cell(rowspan: 3)[Theseus],
[dynamic analysis], num(4957), [1 week],
[patching], num(4748), [2 days],
[18 static analyses], num(8955), [2 months],
)
]
#slide[ #slide[
We showed that: We showed that:

View file

@ -539,16 +539,6 @@
if labels { if labels {
set text(weight: "semibold", fill: luma(30%)) set text(weight: "semibold", fill: luma(30%))
if stage != "static-only" { if stage != "static-only" {
place(
left+bottom,
dx: rprt_pos2.at(0) - 1.4em,
dy: rprt_pos2.at(1) - rprt_size.height - 0.5em,
)[#set align(center); Reflection \ Data]
place(
left+bottom,
dx: dex_pos0.at(0) - 4em,
dy: dex_pos0.at(1) + 0.8em,
)[Dyn Loaded Code]
place( place(
left+bottom, left+bottom,
dx: patcher_pos.at(0) - 0.5em, dx: patcher_pos.at(0) - 0.5em,
@ -560,6 +550,18 @@
dy: phone_pos.at(1) - phone_size.height - 0.5em, dy: phone_pos.at(1) - phone_size.height - 0.5em,
)[#set align(center); Dynamic \ Analysis] )[#set align(center); Dynamic \ Analysis]
} }
if stage not in ("static-only", "theseus-vs-static") {
place(
left+bottom,
dx: rprt_pos2.at(0) - 1.4em,
dy: rprt_pos2.at(1) - rprt_size.height - 0.5em,
)[#set align(center); Reflection \ Data]
place(
left+bottom,
dx: dex_pos0.at(0) - 4em,
dy: dex_pos0.at(1) + 0.8em,
)[Dyn Loaded Code]
}
if stage in ( if stage in (
"theseus", "theseus",
"static-vs-dyn", "static-vs-dyn",
@ -572,6 +574,15 @@
dy: analyser_pos.at(1) + 1em, dy: analyser_pos.at(1) + 1em,
)[Static Analysis] )[Static Analysis]
} }
if stage in (
"theseus-vs-static",
) {
place(
left+bottom,
dx: analyser_pos2.at(0) - 1.5em,
dy: analyser_pos2.at(1) + 1em,
)[Static Analysis]
}
} }
if stage == "static-only" { if stage == "static-only" {
place( place(