ã¯ããã«
æè¿ã16é²è¡šèšã§æ°ããæ¹æ³ãåŠã¶ãšããã¢ã€ãã¢ããããŸããã ç§ã¯æ ãè ãªã®ã§ãä¹ä¹ãåŠç¿ãããããªæ¹æ³ã¯ç§ã«ã¯åããŠããŸããã§ããã å°ãèããŠãæ¯æãã¢ã©ãŒã ããªãã«ããç°¡åãªäŸã決å®ããããšãæãåºããŸããïŒæ°åïŒã æéã®çµéãšãšãã«ãã»ãšãã©ç®ãèŠãŸããã«è§£æ±ºãå§ããŸããã ã§ã¯ããªã䟿å©ãªãã®ãšäŸ¿å©ãªãã®ãçµã¿åãããŠã¿ãŸãããïŒ
å®è£ æ¹æ³ãéžæããå¿ èŠããããŸãã ç§ã¯ã¢ã³ããã€ãã®éçºã«ã€ããŠç¥ããªãã®ã§ïŒãããŠãç§ã¯äžè¬çã«Javaã«ç²ŸéããŠããŸããïŒããã®ãããªäºçŽ°ãªããšã®ã¢ããªã±ãŒã·ã§ã³ãæžãããšã¯ã¹ãºã¡ã®å€§ç ²ããæ®åœ±ããŠããã®ã§ãæ¢åã®ç®èŠãŸãæèšãå€æŽããããšã«ããŸããã
ã«ããã®äžã§ãããŒã«ã®èª¬æãããã»ã¹ã16é²æ°ã«å€æããçµæã衚瀺ãããŸãã smaliã³ãŒãïŒdalvikä»®æ³ãã·ã³ã®ãªãã³ãŒãèšèªïŒã®æ§æã®èª¬æã åçã¯ã»ãšãã©ãªããããããã®ããããããŸãã
.apkæ§é ã«ã€ããŠå°ã
.apkã¢ããªã±ãŒã·ã§ã³ã¯ãzipå§çž®ããããã¡ã€ã«ã§ãã å éšã«ã¯ãAndroidManifest.xmlãšclasses.dexãšãããªãœãŒã¹ãã¡ã€ã«ããããŸãã 2ã€ç®ã¯ãã¡ã€ã³ã¢ã¯ãã£ããã£ã«é¢ããæ å ±ãã€ã³ã¹ããŒã«äžã«èŠæ±ãããæš©éã®ãªã¹ããããã³ç§ãã¡ã®ç®çã«ãšã£ãŠéèŠã§ã¯ãªããã®ä»ã®æ å ±ãªã©ãã¢ããªã±ãŒã·ã§ã³ã«é¢ããåºæ¬æ å ±ãå«ããã¡ã€ã«ã§ãã classes.dex-dalvikä»®æ³ãã·ã³çšã«ã³ã³ãã€ã«ããããã€ãã³ãŒãã ãããjarã«å€æããŠãå€å°ãªããšãèªã¿ãããJavaã³ãŒããååŸã§ããŸãã ä»äœãããŸããã
èªã¿åãå¯èœãªã³ãŒããååŸãã
ãã®ãããã¢ããªã±ãŒã·ã§ã³ã®ãã¡ã€ã«ïŒç§ã®å Žåã¯AlarmDroid ïŒãåãåºããŠè§£åããŸãã ãããè¡ãã«ã¯å€ãã®æ¹æ³ããããŸããã Apk Managerã䜿çšããŸãã ã 次ã«ãclasses.dexãjarã«å€æããå¿ èŠããããŸãã ããã«ã¯dex2jarããããŸãã ãã¡ã€ã«ãdex2jar.batã«ãã©ãã°ã¢ã³ãããããããŸãã 次ã«ãçµæã®jarãã¡ã€ã«ãèªã¿åãæ¹æ³ãåŠç¿ããå¿ èŠããããŸãã ãã®ããã«jd-guiããã°ã©ã ã䜿çšããŸãïŒãšããã§ãEclipseã«ã¯åãååã®ãã©ã°ã€ã³ããããŸãïŒã
ãã®ãããäžéšã®å Žæã§ã¯éã³ã³ãã€ã©ãŒãæããã«å¹³åŠåãããŸãããã»ãšãã©èªã¿åãå¯èœãªã³ãŒããåŸãããŸããã
.smaliãã¡ã€ã«ã®éã³ã³ãã€ã«ãšèªã¿åã
Javaã³ãŒãã¯èªã¿åãå°çšã§ãããããä»®æ³ãã·ã³ã®ãªãã³ãŒãã§ä¿®æ£ããå¿ èŠããããŸãã ããã256åæªæºã§ãã éã³ã³ãã€ã«ã«ã¯ãäžèšã®ApkãããŒãžã£ãŒãŸãã¯more console apktoolã䜿çšã§ããŸãã ãã ãã1ã€ç®ã¯2ã€ç®ã®çŸããã©ãããŒã«ããããããã€ãã®è¿œå æ©èœïŒããšãã°ã解åã¬ãã«ãšå§çž®ã¬ãã«ã®éžæïŒãè¿œå ãããŠããŸãã éã³ã³ãã€ã«åŸãæ¡åŒµåã.smaliã®ãã¡ã€ã«ãå«ããã©ã«ããŒãååŸããŸãã ãããã¯ãŸãã«ãªãã³ãŒãã§ãã ããã¹ããšãã£ã¿ã§æ¢ã«èªã¿åãããšãã§ããŸãã ããããäœããã®çš®é¡ã®ããã¯ã©ã€ããæã«å ¥ãããšããã§ãããã Notepad ++ã«ã¯åŒ·èª¿è¡šç€ºã䜿çšããŸãããã vimã«ãåãããšããããŸãã
ããŠãããŒã«ã䜿çšããŠãæçµçã«ææ¡ãããã®ã§ãã³ãŒããåæããŸãã
æåã®è¡
ãŸããæ倧10åã§ã¯ãªãæ倧15åã®æ°å€ãçæãããšããã§ããããã³ãŒãã調ã¹ãŠãäŸãçæããæ¹æ³ãèŠã€ããŸãã ããªãã¯ãããæ¢ãå¿ èŠããããŸããæšã«ã¯å€ãã®ã¯ã©ã¹ããããŸãã ããããã¡ãœããã®ååã¯ä¿åãããŠãããããããã»ã©é£ãããããŸããã
RingerActivityã¯ã©ã¹ã§ç®çã®ã¡ãœãããèŠã€ããŸãã
ãŸãããã¹ãŠãåçŽãªããã§ãïŒ3ã€ã®æ°åãš2ã€ã®æåãçæããçµæãthis.xã«å ¥ããŸãïŒããã¯ãç§ãã¡ã«ãšã£ãŠäŸ¿å©ã§ãïŒã
ããã§ãsmaliã³ãŒãã§åãã¡ãœãããèŠã€ãããŸããïŒæ®å¿µãªãããsmaliã³ãŒããã€ã©ã€ã¿ãŒã¯ãªã³ã©ã€ã³ã«ãããŸãããç¬èªã®ã³ãŒããã€ã©ã€ããæžãã®ã¯é¢åãªã®ã§ãã³ãŒãã¯ã¹ã¯ãªãŒã³ã·ã§ããã«ãªããŸãïŒã
ïŒã¡ãœããã³ãŒãã¯ããã«ç¶ããŸãïŒ
ã³ãŒãã¯ç解ã§ããŸããããå®æ°ãæåã«äžåºŠèšå®ãããŠããããšã¯æããã§ãã ãããã£ãŠã0xaã0xfã«å€æŽããå€æŽãæ£ããè»éã«ä¹ã£ãŠããããšã確èªããããã«å€æŽã確èªããŸãã ApkãããŒãžã£ãŒã䜿çšããŠãåéã眲åãé»è©±ãžã®è»¢éïŒAndroid SDKãã€ã³ã¹ããŒã«ãããŠããå Žåã¯ãšãã¥ã¬ãŒã¿ãŒã§ãã¹ãã§ããŸãïŒãã€ã³ã¹ããŒã«ãå ã®ã¢ã©ãŒã ã®èšå®ãåŸ æ©ãç£èŠãè¡ããŸãã ãã®æé ãäœåºŠãç¹°ãè¿ãå¿ èŠããããŸãã ç»é¢äžã®æ°åãå¢ããŸãããããšã©ãŒã¯çºçããŠããŸããã ãããïŒ ããã§ãç解ã§ããªãsmaliã³ãŒãã«ã€ããŠå°ãç解ããŠã¿ãŸãããã
smaliã³ãŒããç解ãã
äžè¬çã«ããã¹ãŠã¯ããã§ããªããã説æãããŠããŸã ãç§ã¯ç°¡åã«ããããŠãã·ã¢èªã§å説ããŸãã
ã¿ã€ããã¡ãœããããã£ãŒã«ã
dalvikãªãã³ãŒãã«ã¯ãããªããã£ããšãªãã¡ã¬ã³ã¹ã®2çš®é¡ã®ã¿ã€ãããããŸãã ããªããã£ãåã¯åäžã®æåïŒããšãã°ãI-intãV-voidïŒã§ç€ºãããŸã ãå®å šãªãªã¹ãã¯ãã¡ãã§ãã
åç §åã¯ãªããžã§ã¯ããšé åãã€ãŸããããªããã£ãå以å€ã®ãã¹ãŠã§ãã ã³ãŒãã§ã¯
Lpackage / name / ObjectName ;ããã§ãå é ã®Lã¯ãªããžã§ã¯ãã§ããããšãæå³ããŸãã -ååã®çµããã ãã®ãšã³ããªã¯åçã«ãªããŸã
ããã±ãŒãž åå ãªããžã§ã¯ãåJavaã§ã
é åã®åœ¢åŒã¯[Iã¯intã®1次å é åã§ãïŒJavaã§ã¯int []ã«ãªããŸãïŒã ããã«æž¬å®ããã«ã¯ãæåã«è§ãã£ããè¿œå ããŸãã [[[I == int [] [] []ïŒæž¬å®ã®æ倧æ°ã¯255ã§ãïŒã ãã¡ãããåç §åã®é åãäœæã§ããŸããããšãã°ãæååã®é åã¯æ¬¡ã®ããã«ãªããŸãã
[ Ljava / lang / String ;
ã¡ãœããã¯é·ãæ¹æ³ã§æå®ãããŸããããã«ã¯ãã¡ãœãããå«ããªããžã§ã¯ããã¡ãœããã®ååãæž¡ããããã¹ãŠã®ãã©ã¡ãŒã¿ãŒã®åãæ»ãå€ã®åãå«ãŸããŸãã
Lpackage / name / ObjectName ;-> MethodName ïŒ III ïŒ Zãã®äŸã§ã¯ãLpackage / name / ObjectName; ã¡ãœãããå«ããªããžã§ã¯ããMethodNameã¯ã¡ãœããã®ååãïŒIIIïŒã¯æž¡ããããã©ã¡ãŒã¿ãŒã®ã¿ã€ãïŒãã®å Žåã¯3 intïŒãZã¯æ»ãå€ã®ã¿ã€ãïŒãã®å Žåã¯boolïŒã§ãã
å¥ã®ããè€éãªäŸã次ã«ç€ºããŸãã
ã¡ãœããïŒ I [ [ IILjava / lang / String ; [ Ljava / lang / Object ; ïŒ Ljava / lang / String ;
Javaã§ã¯ããã®ã³ãŒãã¯æ¬¡ã®ããã«ãªããŸãã
æååã¡ãœããïŒ int ã int [ ] [ ] ã int ã String ã Object [ ] ïŒ
ã¯ã©ã¹ãã£ãŒã«ãã¯æ¬¡ã®ããã«å®çŸ©ãããŸãã
Lpackage / name / ObjectName ;-> FieldName ïŒ Ljava / lang / String ;
ããã§ã¯ãäžè¬ã«ããã¹ãŠããã§ã«æ確ã«ãªã£ãŠããŸãã
ç»é²
smaliã³ãŒãã§ã¯ããã¹ãŠã®ã¬ãžã¹ã¿ãŒã¯32ãããã§ãããä»»æã®ã¿ã€ãã®å€ãå«ããããšãã§ããŸãã 64ãããå€ã®å Žåã2ã€ã®ã¬ãžã¹ã¿ã䜿çšãããŸãã
ã¡ãœããå ã®ã¬ãžã¹ã¿ã®æ°ã決å®ãã
ã¬ãžã¹ã¿ã®æ°ã決å®ããã«ã¯2ã€ã®æ¹æ³ããããŸãã .registersãã£ã¬ã¯ãã£ãã¯ã¬ãžã¹ã¿ã®ç·æ°ãå®çŸ©ãã.localsã¯ã¡ãœãããã©ã¡ãŒã¿ãŒã§ã¯ãªãã¬ãžã¹ã¿ã®æ°ã決å®ããŸãã
ãã©ã¡ãŒã¿ãæž¡ã
ã¡ãœãããåŒã³åºããããšãåŒæ°ã¯æåŸã®ã¬ãžã¹ã¿ã«åé¡ãããŸãã ã€ãŸã ã¡ãœããã2ã€ã®åŒæ°ãš5ã€ã®ã¬ãžã¹ã¿ïŒv0ãv4ïŒã§åŒã³åºãããå ŽåãåŒæ°ã¯ã¬ãžã¹ã¿v3ãšv4ã«åé¡ãããŸãã
ééçã¡ãœããã®æåã®ãã©ã¡ãŒã¿ãŒã¯ãåžžã«ã¡ãœããã®åŒã³åºãå ã®ãªããžã§ã¯ãã§ãã ãããã£ãŠãééçã¡ãœãããåŒã³åºãå Žå
LMyObject ;-> callMe ïŒ II ïŒ V
2ã€ã®intã«å ããŠãLMyObjectãæž¡ãããŸãã äž¡æ¹ã®intã®åã«ãããã¡ãœããã«ã¯3ã€ã®ãã©ã¡ãŒã¿ãŒãããããšãããããŸãã ã¡ãœãã5ïŒãŸãã¯ããŒã«ã«çªå·2ïŒã§ã¬ãžã¹ã¿ã®åèšæ°ãèšå®ãããšãv2ã¯ãªããžã§ã¯ããååŸããv3ã¯æåã®intããv4ã¯2çªç®ã®intãååŸããŸãã
ã¬ãžã¹ã¿ã®åœå
2ã€ã®ã¬ãžã¹ã¿ãŒåœåã¹ããŒã ããããŸããäžè¬çãªvã¹ããŒã ãšãã©ã¡ãŒã¿ãŒã¬ãžã¹ã¿ãŒã®pã¹ããŒã ã§ãã äžèšã®äŸã§ã¯ã5ã€ã®æ±çšã¬ãžã¹ã¿v0ãv4ãš3ã€ã®ãã©ã¡ãŒã¿ã¬ãžã¹ã¿p0ãp2ããããåè¿°ã®ããã«p0ãšv2ïŒããã³p1ãšv3ãp2ãšv4ïŒã¯åãã¬ãžã¹ã¿ã瀺ããŸãã
äžè¬ã«ããŸã 埮åŠãªç¹ãããã€ããããŸãããç®èŠãŸãæèšãå€æŽããããšã¯éèŠã§ã¯ãããŸããã
äŸã®16é²æ°ã®ç¿»èš³
smaliã³ãŒãã§ãã¹ãŠãæããã«ãªã£ãã®ã§ããã®äŸã16é²æ°ã«å€æãããšããã§ãããã ç§ã¯æ¬åœã«èªåã®é¢æ°ãæžããããªãã£ãã®ã§ãGoogleã«é ŒããŸããã ãããŠãInteger.toHexStringïŒïŒã¡ãœãããèŠã€ããŸããã
æ£ããæ¹æ³ãèŠã€ãã
private void updateProblemView ïŒ ïŒãããŠåœŒãsmaliã³ãŒãã§
{
TextView localTextView = this ã åé¡ ;
String str1 = String valueOf ïŒ thisãa ïŒ ;
StringBuilder localStringBuilder1 = new StringBuilder ïŒ str1 ïŒ ã append ïŒ "" ïŒ ;
int i = this ã p ;
æåå str2 = op2text ïŒ i ïŒ ;
StringBuilder localStringBuilder2 = localStringBuilder1ã append ïŒ str2 ïŒ ã append ïŒ "" ïŒ ;
int j = this ã b ;
StringBuilder localStringBuilder3 = localStringBuilder2ã append ïŒ j ïŒ ã append ïŒ "" ïŒ ;
int k = this ã q ;
æåå str3 = op2text ïŒ k ïŒ ;
StringBuilder localStringBuilder4 = localStringBuilder3ã append ïŒ str3 ïŒ ã append ïŒ "" ïŒ ;
int m = this ã c ;
æåå str4 = m + "=" ;
localTextViewã setText ïŒ str4 ïŒ ;
}
ã ã¡ãœãã private updateProblemView ïŒ ïŒ V
ã å°å ã®äºº 3
ã ããããŒã°
ã ã©ã€ã³ 520
iget-ãªããžã§ã¯ãv0ãp0ãLcom / splunchy / android / alarmclock / RingerActivity ;->åé¡ïŒ Landroid / widget / TextView ;
new-ã€ã³ã¹ã¿ã³ã¹v1ãLjava / lang / StringBuilder ;
iget v2ãp0ãLcom / splunchy / android / alarmclock / RingerActivity ;-> a ïŒ I
invoke - static { v2 } ãLjava / lang / String ;-> valueOf ïŒ I ïŒ Ljava / lang / String ;
移å-çµæ-ãªããžã§ã¯ãv2
invoke - direct { v1ãv2 } ãLjava / lang / StringBuilder ;-> < init > ïŒ Ljava / lang / String ; ïŒ V
const-æååv2ã ""
invoke - virtual { v1ãv2 } ãLjava / lang / StringBuilder ;-> append ïŒ Ljava / lang / String ; ïŒ Ljava / lang / StringBuilder ;
移å-çµæ-ãªããžã§ã¯ãv1
iget v2ãp0ãLcom / splunchy / android / alarmclock / RingerActivity ;-> p ïŒ I
invoke-çŽæ¥{ p0ãv2 } ãLcom / splunchy / android / alarmclock / RingerActivity ;-> op2text ïŒ I ïŒ Ljava / lang / String ;
移å-çµæ-ãªããžã§ã¯ãv2
invoke - virtual { v1ãv2 } ãLjava / lang / StringBuilder ;-> append ïŒ Ljava / lang / String ; ïŒ Ljava / lang / StringBuilder ;
移å-çµæ-ãªããžã§ã¯ãv1
const-æååv2ã ""
invoke - virtual { v1ãv2 } ãLjava / lang / StringBuilder ;-> append ïŒ Ljava / lang / String ; ïŒ Ljava / lang / StringBuilder ;
移å-çµæ-ãªããžã§ã¯ãv1
iget v2ãp0ãLcom / splunchy / android / alarmclock / RingerActivity ;-> b ïŒ I
invoke - virtual { v1ãv2 } ãLjava / lang / StringBuilder ;-> append ïŒ I ïŒ Ljava / lang / StringBuilder ;
移å-çµæ-ãªããžã§ã¯ãv1
const-æååv2ã ""
invoke - virtual { v1ãv2 } ãLjava / lang / StringBuilder ;-> append ïŒ Ljava / lang / String ; ïŒ Ljava / lang / StringBuilder ;
移å-çµæ-ãªããžã§ã¯ãv1
iget v2ãp0ãLcom / splunchy / android / alarmclock / RingerActivity ;-> q ïŒ I
invoke-çŽæ¥{ p0ãv2 } ãLcom / splunchy / android / alarmclock / RingerActivity ;-> op2text ïŒ I ïŒ Ljava / lang / String ;
移å-çµæ-ãªããžã§ã¯ãv2
invoke - virtual { v1ãv2 } ãLjava / lang / StringBuilder ;-> append ïŒ Ljava / lang / String ; ïŒ Ljava / lang / StringBuilder ;
移å-çµæ-ãªããžã§ã¯ãv1
const-æååv2ã ""
invoke - virtual { v1ãv2 } ãLjava / lang / StringBuilder ;-> append ïŒ Ljava / lang / String ; ïŒ Ljava / lang / StringBuilder ;
移å-çµæ-ãªããžã§ã¯ãv1
iget v2ãp0ãLcom / splunchy / android / alarmclock / RingerActivity ;-> c ïŒ I
invoke - virtual { v1ãv2 } ãLjava / lang / StringBuilder ;-> append ïŒ I ïŒ Ljava / lang / StringBuilder ;
移å-çµæ-ãªããžã§ã¯ãv1
const-æååv2ã "="
invoke - virtual { v1ãv2 } ãLjava / lang / StringBuilder ;-> append ïŒ Ljava / lang / String ; ïŒ Ljava / lang / StringBuilder ;
移å-çµæ-ãªããžã§ã¯ãv1
invoke - virtual { v1 } ãLjava / lang / StringBuilder ;-> toString ïŒ ïŒ Ljava / lang / String ;
移å-çµæ-ãªããžã§ã¯ãv1
invoke - virtual { v0ãv1 } ãLandroid / widget / TextView ;-> setText ïŒ Ljava / lang / CharSequence ; ïŒ V
ã 521 è¡ç®
ãªã¿ãŒã³- ç¡å¹
ã çµäºæ¹æ³
äŸã®æåã®æ°å€ã«ã€ããŠã¯ããã¹ãŠãåçŽã§ãã 亀æ
invoke - static { v2 } ãLjava / lang / String ;-> valueOf ïŒ I ïŒ Ljava / lang / String ;ã«
invoke - static { v2 } ãLjava / lang / Integer ;-> toHexString ïŒ I ïŒ Ljava / lang / String ;ãããŠçµããã«å¯ŸåŠããŸãã ä»ã®2ã€ã¯ããå°ãè€éã§ãæååã«å€æããããçµæã«è¿œå ãããŸãã ãããã£ãŠãæã ã¯çœ®ãæããŸã
iget v2ãp0ãLcom / splunchy / android / alarmclock / RingerActivity ;-> b ïŒ Iã«
invoke - virtual { v1ãv2 } ãLjava / lang / StringBuilder ;-> append ïŒ I ïŒ Ljava / lang / StringBuilder ;
移å-çµæ-ãªããžã§ã¯ãv1
iget v2ãp0ãLcom / splunchy / android / alarmclock / RingerActivity ;-> b ïŒ IïŒæž¡ãããå€ã®ã¿ã€ããå€æŽãããŠããããšã«æ³šæããŠãã ããïŒã 3çªç®ã®æ°å€ã§ãåãããšãè¡ããŸãã
invoke - static { v2 } ãLjava / lang / Integer ;-> toHexString ïŒ I ïŒ Ljava / lang / String ;
移å-çµæ-ãªããžã§ã¯ãv2
invoke - virtual { v1ãv2 } ãLjava / lang / StringBuilder ;-> append ïŒ Ljava / lang / String ; ïŒ Ljava / lang / StringBuilder ;
移å-çµæ-ãªããžã§ã¯ãv1
éå§-å°ããªæåã衚瀺ãããŸãã ããããç§ã¯äœã倧ããªãã®ã欲ããïŒ åé¡ã§ã¯ãããŸãããæååã«è¿œå ããåã«è¿œå ããŸã
invoke - virtual { v2 } ãLjava / lang / String ;-> toUpperCase ïŒ ïŒ Ljava / lang / String ;3ã€ãã¹ãŠã®æ°å€ã«å¯ŸããŠã
移å-çµæ-ãªããžã§ã¯ãv2
å ¥åãã£ãŒã«ããå€æŽ
äžè¬ã«ãããã¯åæ¢ã§ããæ°ããã®ãã¯ããã«é£ãããªããŸããã ããããçŸåšã16é²æ°ãã12é²æ°ãžã®å€æã¯èšç·ŽãããŠããã10é²æ°ã§ã«ãŠã³ããç¶ããŠããŸãã ããã¯ç§ãæãã§ãããã®ã§ã¯ãããŸããã ãããã£ãŠãå ¥åãã£ãŒã«ããå€æããå¿ èŠããããŸãã
ãŸããæŽæ°ã¡ãœãããå®äºããã«ã¯ãå ¥åãã£ãŒã«ãã®åã«ã0xããè¿œå ããŸãã ãŸããããã¯éåžžã«ç°¡åã§ããç§ãã¡ã¯å€æŽããŸã
const-æååv2ã "="ã«
const-æååv2ã ã= 0xã次ã«ãå ¥åãã£ãŒã«ãã®ã¿ã€ããæ°å€ããããã¹ãã«å€æŽããå¿ èŠããããŸãïŒæ®å¿µãªãããæ°å€ã®16é²æ°ã§ã¯æäŸãããŸããïŒã åæ§ã®ããããã£ãxmlãã¡ã€ã«ã«ä¿åãããŸãã ããã§ã¯ãããŒã¯ãŒãã§ãç®è¡ãããæ°åŠããªã©ã®ãã¡ã€ã«ãæ€çŽ¢ããããšãã§ããŸããã ãã¡ã€ã«res / layout / ringer.xmlã§æ¬¡ã®è¡ãèŠã€ããŸãã
googleãinputTypeå€ã®ãªã¹ããèŠã€ãããtextãã«å€æŽããŸãã<EditText androidïŒtextSize = "36.0dip" androidïŒgravity = "left" androidïŒid = "@ id / math_solution" androidïŒvisibility = "invisible" androidïŒlayout_width = "wrap_content" androidïŒlayout_height = "wrap_content" androidïŒ text = "@ null" androidïŒinputType = "phone" />
çæäžã«èšç®ãããçµæãšäžèŽããããã«å ¥åãå€æããæ¹æ³ãåŠã¶å¿ èŠããããŸãïŒRingerActivity.xãèŠããŠããŸããïŒïŒã 次ã®ã³ãŒããæ€çŽ¢ããŠèŠã€ããŸã
...äœããç解ããããšã¯éåžžã«å°é£ã§ããããœãªã¥ãŒã·ã§ã³ãšcom / splunchy / android / alarmclock / RingerActivityã®éã«äœããã®ã€ãªãããããããšãããããŸãã æåŸã«å€æããŸãã-ããã¯smaliãã¡ã€ã«ã§ãããæããã«jd-guiã¯é©åã«è¡šç€ºã§ããŸããã§ããã ããã«è¡ããå¿ èŠãªæ¯èŒæ¹æ³ãèŠã€ããŸãïŒ
label1621 ïŒ label1912 ïŒ for ïŒ ããŒã« bool15 = false ;; bool15 = true ïŒ
{
ããŒã« bool16 = bool15 ;
ãã ã MathProblemSolved = bool16 ;
RingerActivity localRingerActivity14 = this ;
int i9 = 2131099787 ;
TextView localTextView4 = ïŒ TextView ïŒ localRingerActivity14ã findViewById ïŒ i9 ïŒ ;
ãã ã åé¡ = localTextView4 ;
RingerActivity localRingerActivity15 = this ;
int i10 = 2131099788 ;
EditText localEditText1 = ïŒ EditText ïŒ localRingerActivity15ã findViewById ïŒ i10 ïŒ ;
ãã ã solution = localEditText1 ;
RingerActivity localRingerActivity16 = this ;
æåå str7 = "input_method" ;
InputMethodManager localInputMethodManager = ïŒ InputMethodManager ïŒ localRingerActivity16ã getSystemService ïŒ str7 ïŒ ;
ãã ã imm = localInputMethodManager ;
EditText localEditText2 = this ã ãœãªã¥ãŒã·ã§ã³ ;
9 local91 = æ°ãã com / splunchy / android / alarmclock / RingerActivity $ 9 ;
9 local92 = local91 ;
RingerActivity localRingerActivity17 = this ;
ImageButton localImageButton5 = localImageButton3 ;
ImageButton localImageButton6 = localImageButton1 ;
ããŒã«ã«92ã < init > ïŒ localRingerActivity17ãlocalImageButton5ãlocalImageButton6 ïŒ ;
localEditText2ã setOnEditorActionListener ïŒ local91 ïŒ ;
...
...ããŠãå ¥åãã£ãŒã«ãããèªã¿åã£ãè¡ã«å€§æåã®ç¿»èš³ãè¿œå ããŸããããã¯æ¢ã«åŠç¿ããŠããããã§ãã ãã®åŸäº€æãã
iget-ãªããžã§ã¯ãv1ãp0ãLcom / splunchy / android / alarmclock / RingerActivity $ 9 ;-> this $ 0 ïŒ Lcom / splunchy / android / alarmclock / RingerActivity ;
invoke - static { v1 } ãLcom / splunchy / android / alarmclock / RingerActivity ;-> $ 10ã«ã¢ã¯ã»ã¹ïŒ Lcom / splunchy / android / alarmclock / RingerActivity ; ïŒ Landroid / widget / EditText ;
移å-çµæ-ãªããžã§ã¯ãv1
invoke - virtual { v1 } ãLandroid / widget / EditText ;-> getText ïŒ ïŒ Landroid / text / Editable ;
移å-çµæ-ãªããžã§ã¯ãv1
invoke - interface { v1 } ãLandroid / text / Editable ;-> toString ïŒ ïŒ Ljava / lang / String ;
移å-çµæ-ãªããžã§ã¯ãv1
new-ã€ã³ã¹ã¿ã³ã¹v2ãLjava / lang / Integer ;
iget-ãªããžã§ã¯ãv3ãp0ãLcom / splunchy / android / alarmclock / RingerActivity $ 9 ;-> this $ 0 ïŒ Lcom / splunchy / android / alarmclock / RingerActivity ;
iget v3ãv3ãLcom / splunchy / android / alarmclock / RingerActivity ;-> x ïŒ I
invoke - direct { v2ãv3 } ãLjava / lang / Integer ;-> < init > ïŒ I ïŒ V
invoke - virtual { v2 } ãLjava / lang / Integer ;-> toString ïŒ ïŒ Ljava / lang / String ;
移å-çµæ-ãªããžã§ã¯ãv2
invoke - virtual { v1ãv2 } ãLjava / lang / String ;-> equals ïŒ Ljava / lang / Object ; ïŒ Z
移å-çµæv1
...
iget v3ãv3ãLcom / splunchy / android / alarmclock / RingerActivity ;-> x ïŒ Iã«
invoke - direct { v2ãv3 } ãLjava / lang / Integer ;-> < init > ïŒ I ïŒ V
invoke - virtual { v2 } ãLjava / lang / Integer ;-> toString ïŒ ïŒ Ljava / lang / String ;
移å-çµæ-ãªããžã§ã¯ãv2
iget v2ãv3ãLcom / splunchy / android / alarmclock / RingerActivity ;-> x ïŒ Iããã§ã¯ã倧æåãžã®ç¿»èš³ãè¿œå ããŸãã éããŠèŠãŸãã ãã£ãïŒ ãã¹ãŠãæ©èœããŸãã
invoke - static { v2 } ãLjava / lang / Integer ;-> toHexString ïŒ I ïŒ Ljava / lang / String ;
移å-çµæ-ãªããžã§ã¯ãv2
ãããã«
ããã«ããšã話ã圱é¿ãåãŒããŸãããããã«ç©äºã¯è¡ãããŸããã ãããã¬ãŒããªããããã¢ããªã±ãŒã·ã§ã³ãå®è¡ããŠããã©ãŒãã³ã¹ã確èªããããã®ãã¹ãã¯éåžžã«é£ãããæ°åããããå€ãã®è¿·æãªã¢ã¯ã·ã§ã³ãçºçããŸãã
16é²æ°ã§å ¥åããããã«ããæ°ã«å ¥ãã®SwypeããŒããŒãã®ããžã¿ã«ã¬ã€ã¢ãŠããããçŽãããã£ãã®ã§ãã ããããæå·åãããã¬ã€ã¢ãŠããã¡ã€ã«ã¯ãç§ã«ãšã£ãŠä¹ãè¶ããããªãé害ãšãªã£ãŠããŸãã =ïŒ
ãããã¢ã©ãŒã ã®æçµããŒãžã§ã³ã§ãã æ®å¿µãªãããå€æŽåŸã«æŽæ°ãåæ¢ããŸããã ãããã¯ããçŸåšã®æ©èœã¯ååã«ãããŸãã
ãæž èŽããããšãããããŸãããã©ããªæ¹å€ãåãã§ããŸãïŒ
PS 16é²ä¹ç®ããŒãã«