.
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 파일의 내용을 살펴보면
.
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이 되는 어플이 될겁니다.
시간적 여유가 되면 보따리 조금씩 풀어 드릴께요.
2024.05.17 19:00 기준