우선 리버스엔지니어링이라는 단어를 듣고 거부감을 느끼시는 개발자분들이 많으시라 생각됩니다.
하지만 불법적으로 소프트웨어를 사용하렴이 아니라 핸드폰에 걸려있는 락을 풀기 위함이니 이해해 주시기 바랍니다.

대상 핸드폰의 숨겨져있는 매뉴에 들어가서 특정비밀번호를 쳐야 락이 풀리는 구조인데 특정 비밀번호를 얻어내기가 힘듭니다.
우선 숨겨져 있는 매뉴가 포함된 APK파일을 찾아 APKTool을 이용하여 smali 파일을 빼냈습니다.
하지만 완벽하게 디컴파일이 된게 아니라 약간의 기계어가 섞여있더군요...

우선 대충 이해를 하여 고쳐보려 했으나 다시 리팩을하고 jarsign 까지 했는데도 설치가 되질 않습니다.
설치가 안되는 부분이 이해가 안되고 왜 그런지도 모르겠어서 다른방법으로 접근해보려 합니다.

우선 해당파일의 디컴파일 내용입니다:

.class Lcom/android/settings/skyhiddenmenu/HiddenMenu$32;
.super Ljava/lang/Object;
.source "HiddenMenu.java"
# interfaces
.implements Landroid/content/DialogInterface$OnClickListener;
# annotations
.annotation system Ldalvik/annotation/EnclosingMethod;
    value = Lcom/android/settings/skyhiddenmenu/HiddenMenu;->NwPersoSetting()V
.end annotation
.annotation system Ldalvik/annotation/InnerClass;
    accessFlags = 0x0
    name = null
.end annotation
# instance fields
.field final synthetic this$0:Lcom/android/settings/skyhiddenmenu/HiddenMenu;
.field final synthetic val$InputPasswd:Landroid/widget/EditText;
# direct methods
.method constructor <init>(Lcom/android/settings/skyhiddenmenu/HiddenMenu;Landroid/widget/EditText;)V
    .locals 0
    .parameter
    .parameter
    .prologue
    .line 1168
    iput-object p1, p0, Lcom/android/settings/skyhiddenmenu/HiddenMenu$32;->this$0:Lcom/android/settings/skyhiddenmenu/HiddenMenu;
    iput-object p2, p0, Lcom/android/settings/skyhiddenmenu/HiddenMenu$32;->val$InputPasswd:Landroid/widget/EditText;
    invoke-direct {p0}, Ljava/lang/Object;-><init>()V
    return-void
.end method
# virtual methods
.method public onClick(Landroid/content/DialogInterface;I)V
    .locals 8
    .parameter "dialog"
    .parameter "whichButton"
    .prologue
    const/4 v7, 0x0
    const/4 v6, 0x1
    .line 1170
    const/4 v1, 0x0
    .line 1173
    .local v1, result_nw_perso_setting:Z
    :try_start_0
    iget-object v2, p0, Lcom/android/settings/skyhiddenmenu/HiddenMenu$32;->this$0:Lcom/android/settings/skyhiddenmenu/HiddenMenu;
    iget-object v2, v2, Lcom/android/settings/skyhiddenmenu/HiddenMenu;->mPhone:Lcom/android/internal/telephony/gsm/ISkyTelephony;
    iget-object v3, p0, Lcom/android/settings/skyhiddenmenu/HiddenMenu$32;->val$InputPasswd:Landroid/widget/EditText;
    invoke-virtual {v3}, Landroid/widget/EditText;->getText()Landroid/text/Editable;
    move-result-object v3
    invoke-virtual {v3}, Ljava/lang/Object;->toString()Ljava/lang/String;
    move-result-object v3
    iget-object v4, p0, Lcom/android/settings/skyhiddenmenu/HiddenMenu$32;->this$0:Lcom/android/settings/skyhiddenmenu/HiddenMenu;
    iget-boolean v4, v4, Lcom/android/settings/skyhiddenmenu/HiddenMenu;->is_nw_perso_enabled:Z
    if-nez v4, :cond_0
    move v4, v6
    :goto_0
    const/4 v5, 0x0
    invoke-interface {v2, v3, v4, v5}, Lcom/android/internal/telephony/gsm/ISkyTelephony;->setPersoInd(Ljava/lang/String;ZI)Z
    :try_end_0
    .catch Ljava/lang/Exception; {:try_start_0 .. :try_end_0} :catch_0
    move-result v1
    .line 1181
    :goto_1
    if-eqz v1, :cond_3
    .line 1183
    iget-object v2, p0, Lcom/android/settings/skyhiddenmenu/HiddenMenu$32;->this$0:Lcom/android/settings/skyhiddenmenu/HiddenMenu;
    invoke-static {v2}, Lcom/android/settings/skyhiddenmenu/HiddenMenu;->access$200(Lcom/android/settings/skyhiddenmenu/HiddenMenu;)Landroid/preference/CheckBoxPreference;
    move-result-object v2
    iget-object v3, p0, Lcom/android/settings/skyhiddenmenu/HiddenMenu$32;->this$0:Lcom/android/settings/skyhiddenmenu/HiddenMenu;
    iget-boolean v3, v3, Lcom/android/settings/skyhiddenmenu/HiddenMenu;->is_nw_perso_enabled:Z
    if-nez v3, :cond_1
    move v3, v6
    :goto_2
    invoke-virtual {v2, v3}, Landroid/preference/CheckBoxPreference;->setChecked(Z)V
    .line 1184
    iget-object v2, p0, Lcom/android/settings/skyhiddenmenu/HiddenMenu$32;->this$0:Lcom/android/settings/skyhiddenmenu/HiddenMenu;
    iget-object v3, p0, Lcom/android/settings/skyhiddenmenu/HiddenMenu$32;->this$0:Lcom/android/settings/skyhiddenmenu/HiddenMenu;
    iget-boolean v3, v3, Lcom/android/settings/skyhiddenmenu/HiddenMenu;->is_nw_perso_enabled:Z
    if-nez v3, :cond_2
    move v3, v6
    :goto_3
    iput-boolean v3, v2, Lcom/android/settings/skyhiddenmenu/HiddenMenu;->is_nw_perso_enabled:Z
    .line 1185
    iget-object v2, p0, Lcom/android/settings/skyhiddenmenu/HiddenMenu$32;->this$0:Lcom/android/settings/skyhiddenmenu/HiddenMenu;
    const-string v3, "\nSuccess !!\n"
    invoke-static {v2, v3, v6}, Landroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;
    move-result-object v2
    invoke-virtual {v2}, Landroid/widget/Toast;->show()V
    .line 1192
    :goto_4
    return-void
    :cond_0
    move v4, v7
    .line 1173
    goto :goto_0
    .line 1176
    :catch_0
    move-exception v2
    move-object v0, v2
    .line 1177
    .local v0, e:Ljava/lang/Exception;
    const-string v2, "@@@"
    const-string v3, "NwPersoSetting : access Error"
    invoke-static {v2, v3}, Landroid/util/Log;->e(Ljava/lang/String;Ljava/lang/String;)I
    .line 1178
    iget-object v2, p0, Lcom/android/settings/skyhiddenmenu/HiddenMenu$32;->this$0:Lcom/android/settings/skyhiddenmenu/HiddenMenu;
    invoke-static {v2}, Lcom/android/settings/skyhiddenmenu/HiddenMenu;->access$100(Lcom/android/settings/skyhiddenmenu/HiddenMenu;)V
    goto :goto_1
    .end local v0           #e:Ljava/lang/Exception;
    :cond_1
    move v3, v7
    .line 1183
    goto :goto_2
    :cond_2
    move v3, v7
    .line 1184
    goto :goto_3
    .line 1189
    :cond_3
    iget-object v2, p0, Lcom/android/settings/skyhiddenmenu/HiddenMenu$32;->this$0:Lcom/android/settings/skyhiddenmenu/HiddenMenu;
    invoke-static {v2}, Lcom/android/settings/skyhiddenmenu/HiddenMenu;->access$200(Lcom/android/settings/skyhiddenmenu/HiddenMenu;)Landroid/preference/CheckBoxPreference;
    move-result-object v2
    iget-object v3, p0, Lcom/android/settings/skyhiddenmenu/HiddenMenu$32;->this$0:Lcom/android/settings/skyhiddenmenu/HiddenMenu;
    iget-boolean v3, v3, Lcom/android/settings/skyhiddenmenu/HiddenMenu;->is_nw_perso_enabled:Z
    invoke-virtual {v2, v3}, Landroid/preference/CheckBoxPreference;->setChecked(Z)V
    .line 1190
    iget-object v2, p0, Lcom/android/settings/skyhiddenmenu/HiddenMenu$32;->this$0:Lcom/android/settings/skyhiddenmenu/HiddenMenu;
    const-string v3, "\nWrong NCK !!\n"
    invoke-static {v2, v3, v6}, Landroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;
    move-result-object v2
    invoke-virtual {v2}, Landroid/widget/Toast;->show()V
    goto :goto_4
.end method



제가 소스를 이해하고 있는게 맞다면 com/android/internal/telephony/gsm/ISkyTelephony API를 접근해야 할꺼같긴한데,
인터넷으로 뒤져본결과 com.android.internal.telepohy 쪽 API는 사용 불가능한 API라고 본거 같습니다.
이게 루팅을 하고 있더라도 사용이 불가능한건지도 잘 모르겠습니다.
또한 제가 직접 프로그램을 만들지 안고 adb만을 이용해여 해당 API에 접근이 가능한지도 알고 싶습니다....

고수분들 좀 도와주세요 ㅠㅠㅠㅠㅠ

공지사항을 다 읽었음