조소필
2012-05-30 (수) 17:46:24
크랙파일은근찾기힘들어요 시간엄청많이투자하셔야합니다 그래도하고싶으시다면 잘찾아서 한번해보세요
|
||||
Fana
2012-05-29 (화) 23:48:13
질문 채택된 게시물 입니다.
복잡합니다.....
Android DRM Apps Crack 방법
짧은 지식이지만 많은 분들과 공유하고자 크랙 방법을 보여주고자 하는 것이니 대부분 이런 식으로 크랙을 하면 됩니다.
이 글을 보신다면 기본적으로 디버깅 툴인 apktool 이나 apk-manager 를 통해 APK 디컴파일 및 컴파일을 하실 수 있는 분들이라고 생각됩니다.
먼저 단말기에서 런처에서 실행하면 작동되는 라이센스 체크 부분을 디컴파일되어 License 체크하는 루틴을 찾아야합니다.
com/cp/app/MainActivity$2.smali 에서 checkLicense() 를 호출하는 루틴을 찾았습니다.
. method public run()V . locals 2 . prologue . line 100 invoke-static {}, Landroid/os/Looper; - >prepare() V . line 102 :try_start_0 iget-object v0 , p0 , Lcom/cp/app/MainActivity$2;->this$0: Lcom/cp/app/MainActivity; iget-object v0 , v0 , Lcom/cp/app/MainActivity; - >licenseAuthenticator: Lcom/verizon/vcast/apps/LicenseAuthenticator; sget-object v1 , Lcom/cp/app/MainActivity; ->verizonAppKeyword: Ljava/lang/String; # checkLicense 호출해서 v0으로 결과값을 반환하고 있네요. invoke-virtual { v0 , v1 }, Lcom/verizon/vcast/apps/LicenseAuthenticator; - >checkLicense(Ljava/lang/String;) I move-result v0 . line 103 iget-object v1 , p0 , Lcom/cp/app/MainActivity$2;->this$0: Lcom/cp/app/MainActivity; # checkLicense에서 v0으로 얻은 결과값을 isDRMDone() 보내서 v0으로 결과값을 반환 invoke-virtual { v1 , v0 }, Lcom/cp/app/MainActivity; - >isDRMDone(I) Z move-result v0 # isDRMDone() 에 얻은 v0의 결과값 에러 그리고 정상 if-eqz v0 , :cond_0 # 이후 코드들... 결국 마지막 if-eqz 문을 보면 v0에 0과 1의 결과 값이고 isDRMDone() 부분을 보면 v0에 입력되는 것은 0 또는 1 인것을 확인할 수 있습니다. 그럼 checkLicense() 호출에서 무조건 1 값을 반환하도록 하면 간단히 해결됩니다. 위에 보면 invoke-virtual
문장에서 Lcom/verizon/vcast/apps/LicenseAuthenticator; 를 보고 com/verizon/vcast/apps/LicenseAuthenticator.smali 파일의 내용을 살펴보면
checkLicense() 메소드 루틴 부분을 쉽게 찾을 수 있습니다. . method public declared-synchronized checkLicense( Ljava/lang/String; )I . locals 10 . parameter "keyword" . prologue # 무조건 v0에 1값을 넣고 v0을 반환하고 호출을 종료하도록 시작 부분에 코드를 삽입합니다. # 그후 코드는 무시되니 신경 쓰지 맙시다. const/4 v0 , 0x1 return v0 const/16 v9 , 0x64 const-string v7 , "checkLicense() finished. Trying to shutDownLicenseService()" const-string v7 , "LicenseAuthenticator" . line 256 monitor-enter p0 :try_start_0 const-string v7 , "LicenseAuthenticator" const-string v8 , "begin checkLicense()" # 이후 코드들..... ----------------------------------------------------------------- 이렇게 수정하고 컴파일하면 무조건 라인센스가 1이 되는 어플이 될겁니다. 시간적 여유가 되면 보따리 조금씩 풀어 드릴께요. |
||||
.
method
public
run()V
.
locals
2
.
prologue
.
line
100
invoke-static
{},
Landroid/os/Looper;
-
>prepare()
V
.
line
102
:try_start_0
iget-object
v0
,
p0
, Lcom/cp/app/MainActivity$2;->this$0:
Lcom/cp/app/MainActivity;
iget-object
v0
,
v0
,
Lcom/cp/app/MainActivity;
-
>licenseAuthenticator:
Lcom/verizon/vcast/apps/LicenseAuthenticator;
sget-object
v1
,
Lcom/cp/app/MainActivity;
->verizonAppKeyword:
Ljava/lang/String;
# checkLicense 호출해서 v0으로 결과값을 반환하고 있네요.
invoke-virtual
{
v0
,
v1
},
Lcom/verizon/vcast/apps/LicenseAuthenticator;
-
>checkLicense(Ljava/lang/String;)
I
move-result
v0
.
line
103
iget-object
v1
,
p0
, Lcom/cp/app/MainActivity$2;->this$0:
Lcom/cp/app/MainActivity;
# checkLicense에서 v0으로 얻은 결과값을 isDRMDone() 보내서 v0으로 결과값을 반환
invoke-virtual
{
v1
,
v0
},
Lcom/cp/app/MainActivity;
-
>isDRMDone(I)
Z
move-result
v0
# isDRMDone() 에 얻은 v0의 결과값 에러 그리고 정상
if-eqz
v0
, :cond_0
# 이후 코드들...
결국 마지막 if-eqz 문을 보면 v0에 0과 1의 결과 값이고 isDRMDone() 부분을 보면 v0에 입력되는 것은 0 또는 1 인것을 확인할 수 있습니다. 그럼 checkLicense() 호출에서 무조건 1 값을 반환하도록 하면 간단히 해결됩니다.
위에 보면
invoke-virtual
{
v0
,
v1
},
Lcom/verizon/vcast/apps/LicenseAuthenticator;
-
>checkLicense(Ljava/lang/String;)
I
문장에서 Lcom/verizon/vcast/apps/LicenseAuthenticator;
-
>checkLicense()
를 보고
com/verizon/vcast/apps/LicenseAuthenticator.smali 파일의 내용을 살펴보면
checkLicense() 메소드 루틴 부분을 쉽게 찾을 수 있습니다.
.
method
public
declared-synchronized
checkLicense(
Ljava/lang/String;
)I
.
locals
10
.
parameter
"keyword"
.
prologue
# 무조건 v0에 1값을 넣고 v0을 반환하고 호출을 종료하도록 시작 부분에 코드를 삽입합니다.
# 그후 코드는 무시되니 신경 쓰지 맙시다.
const/4
v0
,
0x1
return
v0
const/16
v9
,
0x64
const-string
v7
,
"checkLicense() finished. Trying to shutDownLicenseService()"
const-string
v7
,
"LicenseAuthenticator"
.
line
256
monitor-enter
p0
:try_start_0
const-string
v7
,
"LicenseAuthenticator"
const-string
v8
,
"begin checkLicense()"
# 이후 코드들.....
-----------------------------------------------------------------
이렇게 수정하고 컴파일하면 무조건 라인센스가 1이 되는 어플이 될겁니다.
시간적 여유가 되면 보따리 조금씩 풀어 드릴께요.