2012-07-07 2 views
0

나는 항아리와의 APK를 디코딩하는 간단한 Windows 배치 파일을 만들어, 그것은 일 :는 윈도우 배치 파일 오류가

@ECHO off 
SETLOCAL ENABLEDELAYEDEXPANSION 
SET listejar=:core.jar:core-junit.jar:bouncycastle.jar:ext.jar:framework.jar:framework2.jar:android.policy.jar:services.jar:apache-xml.jar:filterfw.jar:java.awt.jar:svc.jar:am.jar:android.test.runner.jar:bmgr.jar:bu.jar:com.android.future.usb.accessory.jar:com.android.location.provider.jar:com.google.android.maps.jar:com.google.android.media.effects.jar:com.google.widevine.software.drm.jar:com.samsung.device.jar:com.yamaha.android.media.jar:twframework.jar:send_bug.jar:GlobalConfig.jar:ime.jar:input.jar:javax.obex.jar:libvtmanagerjar.jar:minimode.jar:monkey.jar:pm.jar:seccamera.jar:secframework.jar:sechardware.jar:secmediarecorder.jar:sec_feature.jar 
SET baksmali=c:\DO\baksmali.jar 
SET smali=c:\do\smali.jar 
SET BTP1=c:\do 
SET BTP2=c:\do\framework 

FOR %%F IN ("*.odex") DO (
     @echo. 
     @echo. 
     @echo. 
     ECHO Decompiling %%F 
     java -Xmx1024m -jar %baksmali% -a 15 -d %btp1% -d %btp2% -c %listejar% -x "%%F" -o "%%~nF" 
     ECHO Compiling %%~nF classses.dex 
     md "%%~dpnF"_o 
     java -Xmx1024m -jar %smali% -a 15 %%~nF -o "%%~dpnF"_o\classes.dex 
     RD /s/q "%%~dpnF" 

     C:\DO\7z.exe u "%%~dpnF".jar %%~dpnF"_o\classes.dex >NUL 
     RD /s/q %%~dpnF"_o 
     DEL %%~dpnxF 
     ECHO %%~nF is Deodexed 
    ) 
cd.. 

CD app 
FOR %%F IN ("*.odex") DO (
     @echo: 
     @echo: 
     @echo: 
     ECHO Decompiling %%F 
     java -Xmx1024m -jar %baksmali% -a 15 -d %btp1% -d %btp2% -c %listejar% -x "%%F" -o "%%~nF" 
     ECHO Compiling %%~nF classses.dex 
     md "%%~dpnF"_o 
     java -Xmx1024m -jar %smali% -a 15 %%~nF -o "%%~dpnF"_o\classes.dex 
     RD /s/q "%%~dpnF" 
     C:\DO\7z.exe u "%%~dpnF".apk %%~dpnF"_o\classes.dex >NUL 
     RD /s/q %%~dpnF"_o 
     DEL %%~dpnxF 
     ECHO %%~nF is Deodexed 
    ) 
echo ALL DONE press any key to exit 
pause >NUL 
exit 

그러나 나는 그것이 조금 더 나은 만들려고, 나는 몰라 내가 잘못 했어. 바로 지금 종료됩니다. 문제에 대한 도움은 정말 감사하겠습니다. 이것은 내가 수정 된 버전하려고 노력 무엇

: 난 당신이 구문 오류가 발생하는 이유를 확인하기 위해 코드를 추적하지 않은

@ECHO off 
SETLOCAL ENABLEDELAYEDEXPANSION 
SET listejar=:core.jar:core-junit.jar:bouncycastle.jar:ext.jar:framework.jar:framework2.jar:android.policy.jar:services.jar:apache-xml.jar:filterfw.jar:java.awt.jar:svc.jar:am.jar:android.test.runner.jar:bmgr.jar:bu.jar:com.android.future.usb.accessory.jar:com.android.location.provider.jar:com.google.android.maps.jar:com.google.android.media.effects.jar:com.google.widevine.software.drm.jar:com.samsung.device.jar:com.yamaha.android.media.jar:twframework.jar:send_bug.jar:GlobalConfig.jar:ime.jar:input.jar:javax.obex.jar:libvtmanagerjar.jar:minimode.jar:monkey.jar:pm.jar:seccamera.jar:secframework.jar:sechardware.jar:secmediarecorder.jar:sec_feature.jar 
SET baksmali=c:\DO\baksmali.jar 
SET smali=c:\do\smali.jar 
SET BTP1=c:\do 
SET BTP2=c:\do\framework 

CD framework 
IF EXIST *.odex (GOTO STARTFW) ELSE (ECHO Odex Not Found && GOTO FINISHEDFW) 

:STARTFW 
FOR %%F IN ("*.odex") DO (
@echo. 
@echo. 
@echo. 
ECHO Decompiling %%~nxF 
java -Xmx1024m -jar %baksmali% -a 15 -d %btp1% -d %btp2% -c %listejar% -x "%%F" -o "%%~nF" 
ECHO Compiling %%~nF classses.dex 
MD "%%~dpnF"_o 
java -Xmx1024m -jar %smali% -a 15 %%~nF -o "%%~dpnF"_o\classes.dex 
RD /s/q "%%~dpnF" 
IF EXIST "%%~dpnF"_o\classes.dex (GOTO CONTINIUEFW) ELSE (GOTO CHECKFW) 

:CHECKFFW 
IF NOT EXIST C:\DO\Framework\ERORR (MD C:\Framework\Error) 
MOVE /Y "%%~dpnF".* C:\Framework\Error 
ECHO Error With %%~nxF & %%~nF.jar 
ECHO Moved To Error Folder 
GOTO SKIPFW 

:CONTINIUEFW 
ECHO Injecting classes.dex to "%%~nF".jar 
C:\DO\7z.exe u "%%~dpnF".jar %%~dpnF"_o\classes.dex >NUL 
RD /s/q %%~dpnF"_o 
DEL %%~dpnxF 
ECHO %%~nF.jar is Deodexed 
IF EXIST *.odex ( 
    GOTO STARTFW 
) ELSE ( 
    ECHO Odex Not Found 
    GOTO FINISHEDFW 
) 

:SKIPFW 
) 

:FINISHEDFW 
CD.. 
CD app 

IF EXIST *.odex ( 
    GOTO STARTAPP 
) ELSE ( 
    ECHO Odex Not Found 
    GOTO FINISHEDAPP 
) 
:STARTAPP 
FOR %%F IN ("*.odex") DO (
@echo. 
@echo. 
@echo. 
ECHO Decompiling %%~nxF 
java -Xmx1024m -jar %baksmali% -a 15 -d %btp1% -d %btp2% -c %listejar% -x "%%F" -o "%%~nF" 
ECHO Compiling %%~nF classses.dex 
MD "%%~dpnF"_o 
java -Xmx1024m -jar %smali% -a 15 %%~nF -o "%%~dpnF"_o\classes.dex 
RD /s/q "%%~dpnF" 
IF EXIST "%%~dpnF"_o\classes.dex (GOTO CONTINIUEAPP) ELSE (GOTO CHECKAPP) 

:CHECKFAPP 
IF NOT EXIST C:\DO\app\ERORR (MD C:\app\Error) 
MOVE /Y "%%~dpnF".* C:\app\Error 
ECHO Error With %%~nxF & %%~nF.apk 
ECHO Moved To Error Folder 
GOTO SKIPAPP 

:CONTINIUEAPP 
ECHO Injecting classes.dex to "%%~nF".apk 
C:\DO\7z.exe u "%%~dpnF".apk %%~dpnF"_o\classes.dex >NUL 
RD /s/q %%~dpnF"_o 
DEL %%~dpnxF 
ECHO %%~nF.apk is Deodexed 
IF EXIST *.odex ( 
    GOTO STARTAPP 
) ELSE ( 
    ECHO Odex Not Found 
    GOTO FINISHEDAPP 
) 

:SKIPAPP 

) 

echo ALL DONE press any key to exit 
pause >NUL 
exit 
+0

많은 스크립트 코드가 있습니다. 변경 한 비트 (이전 및 이후) ​​만 특별히 포함하면 도움이 될 수 있습니다. 또한 다양한 다른 'echo' 호출로 스크립트를 뿌리면 스크립트가 종료되기 전에 얼마나 멀리 떨어져 있는지 확인할 수 있습니다. 나는 그것이 CMD 스크립트를 디버깅하는 유용한 방법이라는 것을 발견했다 ...'cd framework' 후 이 끝난 후 – reuben

+0

이 그것의 IF EXIST * .odex (GOTO STARTFW) ELSE (ECHO Odex Not Found && GOTO FINISHEDFW)' it 'C : \ DO \ framework> IF EXIST * .odex (GOTO STARTFW) ELSE (ECHO Odex Not Found && GOTO FINISHEDFW)'')가 이번에는 예기치 않게 나타났습니다.' 'C : \ DO \ 프레임 워크>)' 그러면 종료됩니다. – user1509093

+0

'SKIPFW' 이후에')'이 무엇입니까? – reuben

답변

1

. 하지만 심각한 문제가 있습니다 - 루프 내에서 GOTO를 사용하고 동일한 루프 내에서 레이블로 분기하려고합니다. 그것은 단순히 당신이 원하는 방식으로 작동하지 않을 것입니다. GOTO를 사용하는 순간 루프가 끊어집니다. GOTO는 레이블 OK를 찾았지만 스크립트는 더 이상 루프에 대해 아무것도 모릅니다. 당신이 정말로 영리하고 코드를 난독 화하기를 원하지 않는 한, 당신의 결과는 당신이 의도 한 것과 다른 것일 수 밖에 없습니다.

일반적으로 괄호 안의 코드 블록 내에 레이블을 넣으면 안됩니다. FOR 루프와 IF 문 모두에 해당됩니다. IF/ELSE 블록 내의 유사한 문제점에 대해서는 (Windows batch) Goto within if block behaves very strangely을 참조하십시오.