TODO: Androguard
ΠΡΠΎ ΠΎΡΠ»ΠΈΡΠ½Π΅ΠΉΡΠ°Ρ Python-Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΄Π»Ρ ΠΏΠ°ΡΡΠΈΠ½Π³Π° APK, Dex ΠΈ Π΄Ρ ΡΠ°ΠΉΠ»ΠΎΠ², ΡΠ²ΡΠ·Π°Π½Π½ΡΡ Ρ Android-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΠΌΠΈ. ΠΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°ΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ Π΄Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΡ ΠΈ ΡΡΡΠΎΠΈΡΡ XREF'Ρ Π² ΠΎΠ±Π΅ ΡΡΠΎΡΠΎΠ½Ρ (ΡΡΠΎ ΠΊΠ»Π°ΡΡ ΠΈΠ»ΠΈ ΠΌΠ΅ΡΠΎΠ΄ Π²ΡΠ·ΡΠ²Π°ΡΡ, ΠΊΡΠΎ ΠΈΡ Π²ΡΠ·ΡΠ²Π°Π΅Ρ).
ΠΠΈΠ½ΡΡΡ: Π½Π΅ Π΄ΠΎΡΡΠ°Π΅Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΈ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ ΠΏΠΎΠ»ΡΡ .
ΠΡΠΈΠΌΠ΅Ρ
"""
ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΠΏΠΈΡΠΎΠΊ Π²ΡΠ΅Ρ
ΠΊΠ»Π°ΡΡΠΎΠ², ΡΡΠΎ ΡΠ΅ΡΡΠΈΡΡΡΡ (extends) com.google.protobuf.GenerateMessageLite
"""
from androguard.core.bytecodes.apk import APK
from androguard.core.bytecodes.dvm import DalvikVMFormat
from androguard.core.analysis.analysis import Analysis
from androguard.core.analysis.analysis import ClassAnalysis
from androguard.misc import AnalyzeAPK
from pathlib import Path
from androguard.decompiler.decompiler import DecompilerJADX
def ClassToProto(classAnalysis: ClassAnalysis):
# Androguard Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π² ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΠΏΠΎΠ»Ρ (((
# Π LIEF Π²ΠΎΠΎΠ±ΡΠ΅ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ Π² ΠΏΠΎΠ»Ρ..
for fieldClassAnalysis in classAnalysis.get_fields():
encodedField = fieldClassAnalysis.field
print(encodedField.name)
print(classAnalysis.name)
# ΠΠ°Π³ΡΡΠΆΠ°Π΅ΠΌ APK Π² Androguard
apk_file = Path('my.apk')
BASE_CLASS_NAME = 'Lcom/google/protobuf/GeneratedMessageLite;'
def test_apk():
apk_info, dex_info_list, analysis = AnalyzeAPK(apk_file)
# ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ Π²ΡΠ΅Ρ
ΠΊΠ»Π°ΡΡΠ°Ρ
, ΡΡΠΎ ΡΠ°ΡΡΠΈΡΡΡΡ com.google.protobuf.GeneratedMessageLite
generatedMessageLiteClassAnalysis = analysis.get_class_analysis(BASE_CLASS_NAME)
res = []
if generatedMessageLiteClassAnalysis:
for classAnalysis in generatedMessageLiteClassAnalysis.get_xref_from():
if classAnalysis.extends == BASE_CLASS_NAME: # We can extend only one class!
res.append(classAnalysis.name)
# ClassToProto(classAnalysis)
...
...
...
else:
print('com.google.protobuf.GeneratedMessageLite not found :(')
# Save classes
with Path('out/classes.text').open(mode='w') as out_stream:
out_stream.write('\n'.join(res))
def test_jadx():
apk_info = APK(apk_file)
d = DalvikVMFormat(apk_info)
dx = Analysis(d)
decompiler = DecompilerJADX(d, dx)
d.set_decompiler(decompiler)
d.set_vmanalysis(dx)
class_ = d.get_class(BASE_CLASS_NAME)
...
test_apk()Last updated
Was this helpful?