Skip to content

Instantly share code, notes, and snippets.

@fffonion
Last active October 23, 2016 15:26
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save fffonion/17a186ee4622b07cbf5b to your computer and use it in GitHub Desktop.
Save fffonion/17a186ee4622b07cbf5b to your computer and use it in GitHub Desktop.
wlanchang smali auto inject
.class public Lcom/test/Debug;
.super Ljava/lang/Object;
# static fields
.field public static final DEBUG_BILLING_DUMMY:Z = false
.field public static final DEBUG_CHECK_MD5:Z = false
.field public static final DEBUG_DISABLE_EVIDENCE:Z = false
.field public static final DEBUG_DOWNLOAD_GROUP:Z = false
.field public static final DEBUG_DUMP_MEMORY_INFO:Z = false
.field public static final DEBUG_IGNORE_SQMK_LIB:Z = false
.field public static final DEBUG_INVALIDITY_WEBVIEW:Z = false
.field public static final DEBUG_LOG_CRYPT_KEY:Z = false
.field public static final DEBUG_LOG_DETAIL:Z = false
.field public static final DEBUG_LOG_RAW_TOUCH_EVENT:Z = false
.field public static final DEBUG_LOG_RESPONSE_XML:Z = false
.field public static final DEBUG_LOG_SPEC_INFO:Z = false
.field public static final DEBUG_LOG_TOUCH_EVENT:Z = false
.field public static final DEBUG_MENU_KEY:Z = false
.field public static final DEBUG_REMOVE_SAVE_DATA_FILE:Z = false
.field public static final DEBUG_SAVE_ERROR_LOG:Z = false
.field public static final DEBUG_TEST_VIEW:Z = false
.field public static final DEBUG_TRACE:Z = false
.field public static DEBUG_TRACEVIEW:Z = false
.field public static final DEBUG_UNAVAILABLE_EXTERNAL_STORAGE:Z = false
.field public static final DEBUG_USE_SET_FIXED_SIZE:Z = false
.field public static final DEBUG_WITHOUT_IMEI:Z = false
.field public static MARKET:Ljava/lang/String; = null
.field public static final RELEASE_GOOGLE_BILLING:Z = true
.field public static final RELEASE_LIVE:Z = true
.field public static TAG:Ljava/lang/String; = null
.field public static TAG_GP:Ljava/lang/String; = null
.field public static final TRACEVIEW_PATH:Ljava/lang/String; = "traceview"
# direct methods
.method static constructor <clinit>()V
.locals 1
const-string v0, "RJ-java"
sput-object v0, Lcom/test/Debug;->TAG:Ljava/lang/String;
const-string v0, "RJ-GP"
sput-object v0, Lcom/test/Debug;->TAG_GP:Ljava/lang/String;
const-string v0, "Google"
sput-object v0, Lcom/test/Debug;->MARKET:Ljava/lang/String;
const/4 v0, 0x0
sput-boolean v0, Lcom/test/Debug;->DEBUG_TRACEVIEW:Z
return-void
.end method
.method public constructor <init>()V
.locals 0
invoke-direct {p0}, Ljava/lang/Object;-><init>()V
return-void
.end method
.method public static varargs detail(Ljava/lang/String;[Ljava/lang/Object;)V
.locals 2
.param p0, "format" # Ljava/lang/String;
.param p1, "objs" # [Ljava/lang/Object;
.prologue
invoke-static {p0, p1}, Ljava/lang/String;->format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
move-result-object v0
const-string v1, "RJ-DETAIL"
invoke-static {v1, v0}, Landroid/util/Log;->v(Ljava/lang/String;Ljava/lang/String;)I
return-void
.end method
.method public static varargs err(Ljava/lang/String;[Ljava/lang/Object;)V
.locals 2
.param p0, "format" # Ljava/lang/String;
.param p1, "objs" # [Ljava/lang/Object;
.prologue
invoke-static {p0, p1}, Ljava/lang/String;->format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
move-result-object v0
const-string v1, "RJ-ERROR"
invoke-static {v1, v0}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;)I
return-void
.end method
.method public static varargs log(Ljava/lang/String;[Ljava/lang/Object;)V
.locals 1
.param p0, "format" # Ljava/lang/String;
.param p1, "objs" # [Ljava/lang/Object;
.prologue
const-string v0, "RJ"
invoke-static {v0, p0, p1}, Lcom/test/Debug;->logWithTag(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
return-void
.end method
.method public static varargs logGP(Ljava/lang/String;[Ljava/lang/Object;)V
.locals 1
.param p0, "format" # Ljava/lang/String;
.param p1, "objs" # [Ljava/lang/Object;
.prologue
const-string v0, "RJ-GP"
invoke-static {v0, p0, p1}, Lcom/test/Debug;->logWithTag(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
return-void
.end method
.method public static varargs logWithTag(Ljava/lang/String;Ljava/lang/String;[Ljava/lang/Object;)V
.locals 1
.param p0, "tag" # Ljava/lang/String;
.param p1, "format" # Ljava/lang/String;
.param p2, "objs" # [Ljava/lang/Object;
.prologue
invoke-static {p1, p2}, Ljava/lang/String;->format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
move-result-object v0
invoke-static {p0, v0}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
return-void
.end method
.method public static log_cjh(Ljava/lang/String;)V
.locals 1
const-string v0, "RJ-WLANCHANG"
invoke-static {v0, p0}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
return-void
.end method
.method public static log_pwd(Ljava/lang/String;)V
.locals 1
const-string v0, "WLANCHANG-PASSWORD"
invoke-static {v0, p0}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
return-void
.end method
.method public static log_usr(Ljava/lang/String;)V
.locals 1
const-string v0, "WLANCHANG-USERNAME"
invoke-static {v0, p0}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
return-void
.end method
.method public static startMethodTracing()V
.locals 2
sget-boolean v0, Lcom/test/Debug;->DEBUG_TRACEVIEW:Z
if-eqz v0, :cond_0
const-string v0, "traceview : start"
const/4 v1, 0x0
new-array v1, v1, [Ljava/lang/Object;
invoke-static {v0, v1}, Lcom/test/Debug;->log(Ljava/lang/String;[Ljava/lang/Object;)V
invoke-static {}, Landroid/os/Debug;->startMethodTracing()V
:cond_0
return-void
.end method
.method public static stopMethodTracing()V
.locals 2
sget-boolean v0, Lcom/test/Debug;->DEBUG_TRACEVIEW:Z
if-eqz v0, :cond_0
const-string v0, "traceview : stop"
const/4 v1, 0x0
new-array v1, v1, [Ljava/lang/Object;
invoke-static {v0, v1}, Lcom/test/Debug;->log(Ljava/lang/String;[Ljava/lang/Object;)V
invoke-static {}, Landroid/os/Debug;->stopMethodTracing()V
:cond_0
return-void
.end method
.method public static varargs warning(Ljava/lang/String;[Ljava/lang/Object;)V
.locals 2
.param p0, "format" # Ljava/lang/String;
.param p1, "objs" # [Ljava/lang/Object;
.prologue
invoke-static {p0, p1}, Ljava/lang/String;->format(Ljava/lang/String;[Ljava/lang/Object;)Ljava/lang/String;
move-result-object v0
const-string v1, "RJ-WARNING"
invoke-static {v1, v0}, Landroid/util/Log;->w(Ljava/lang/String;Ljava/lang/String;)I
return-void
.end method
import os, os.path as opath
import re
SRC_DIR = r'Z:\wlanchang-3.0.3.1'
#TARG_DIR = r'Z:\out'
keyword_name = ['user', 'usr']
keyword_pwd = ['password', 'pwd']
black_list = ['wlanuserip','agent','usertype']
# if not opath.exists(TARG_DIR):
# os.mkdir(TARG_DIR)
SRC_DIR = opath.join(SRC_DIR ,r'smali\com\wlanplus\chang')
#copy debug classes
_debug_class = opath.join(SRC_DIR, r'..\..\..\..\smali\com\test')#back to smali\com\debug
if not opath.exists(_debug_class):
print(_debug_class)
os.makedirs(_debug_class)
open(opath.join(_debug_class, 'Debug.smali'), 'w').write(open('Debug.smali').read())
#find class
for root, ds, fs in os.walk(SRC_DIR):
for f in fs:
if open(opath.join(root, f)).read().find('logonsessid') != -1:#login classes
SRC_DIR = root
break
if SRC_DIR.endswith('smali\com\wlanplus\chang'):#not found
print('LOGIN classes not found.')
os._exit(0)
print('LOGIN classes are under %s' % SRC_DIR)
keyword_match = lambda s, lst:sum([1 if x in s.lower() else 0 for x in lst]) > 0
keyword_match_lines = lambda ss, lst:[s for s in range(len(ss)) if sum([1 if x in ss[s].lower() else 0 for x in lst]) > 0]
for smali in os.listdir(SRC_DIR):
_readlines = open(opath.join(SRC_DIR, smali)).readlines()
_outfile = open(opath.join(SRC_DIR, smali), 'w')
_lastline = []#last 1 -> [-1]
_inject_cnt = 0
for line in _readlines:
#type 1, form submit
if re.search("invoke-interface \{[pv\d]{2,3}, [pv\d]{2,3}, [pv\d]{2,3}\}, Ljava/util/Map;->put\(Ljava/lang/Object;Ljava/lang/Object;\)Ljava/lang/Object", line) \
and not keyword_match(_lastline[-1], black_list):
_m = keyword_match_lines(_lastline, keyword_name + keyword_pwd)
if _m:
line_idx = _m[-1]
_reg = re.findall('[pv\d]{2,3}, [pv\d]{2,3}, ([pv\d]{2,3})', line)[0]
if keyword_match(_lastline[line_idx], black_list):
_inject_cnt -= 1
elif keyword_match(_lastline[line_idx], keyword_name):
_outfile.write(" invoke-static {%s}, Lcom/test/Debug;->log_usr(Ljava/lang/String;)V\n\n" % _reg)
elif keyword_match(_lastline[line_idx], keyword_pwd):
_outfile.write(" invoke-static {%s}, Lcom/test/Debug;->log_pwd(Ljava/lang/String;)V\n\n" % _reg)
else:
_inject_cnt -= 1
_inject_cnt += 1
#type 2, raw form-encoded
elif re.search("invoke-virtual \{[pv\d]{2,3}, [p\d]{2,3}\}, Ljava/lang/StringBuilder;->append\(Ljava/lang/String;\)Ljava/lang/StringBuilder;", line):
_m = keyword_match_lines(_lastline, keyword_name)
if _m:
line_idx = _m[-1]
_reg = re.findall('[pv\d]{2,3}, ([pv\d]{2,3})', line)[0]
if keyword_match(_lastline[line_idx], keyword_name):
_outfile.write(" invoke-static {%s}, Lcom/test/Debug;->log_usr(Ljava/lang/String;)V\n\n" % _reg)
_outfile.write(" invoke-static {%s%d}, Lcom/test/Debug;->log_pwd(Ljava/lang/String;)V\n\n" % (_reg[0], int(_reg[1:])+1))
else:
_inject_cnt -= 1
_inject_cnt += 1
_outfile.write(line)
if line.strip('\n\r ')!='':
if len(_lastline) > 5:
_lastline.pop(0)
_lastline.append(line)
_outfile.flush()
_outfile.close()
print('%s done. inject %d' % (smali, _inject_cnt))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment