최근에 예전에 쓰던 폰 하나를 루팅했습니다. xda 뒤적이다가 간단한 스크립트 발견했고, 보아하니 해당 스크립트로 루팅한분들이 좀 계셔서 제 G3 A를 루팅했죠.
(비하인드가 있는 폰이지요.. 하핳, 부활한 폰..)
진행 과정 중 USB 디버깅이 자꾸 풀려서 스크립트 보면서 필요한 부분 수정해가면서 했었는데, 보다보니 Exploit 코드 자체가 간단하길래 풀어서 글로 써봅니다.
Analysis!
우선 해당 스크립트는 아래 글에 올라와있습니다.
받아서 구조를 보면…
adb와 busybox, supersu 바이너리 등이 있습니다.
실제로 동작하는 부분은 스크립트(bat, sh 파일)랑 Send_Command.exe 정도이고, 나머지는 별다른거 없습니다.
코드는 나중에 보고 동작 플로우를 보면 이렇습니다.
-
USB 연결 후 스크립트 실행
-
/data/local/tmp에 busybox, supersu 바이너리 전달
-
리부팅
-
다운로드 모드 진입(전원+볼륨아래 => 로고 => 볼륨아래 + 볼륨 위)
-
시리얼 포트 찾고, Send_Command.exe로 명령 전달
-
ENTER
-
sh /data/local/tmp/lg_root.sh dummy 1 /data/local/tmp/UPDATE-SuperSU-v2.46.zip /data/local/tmp/busybox
=> 여기서 lg_root.sh를 요약하면 supersu, busybox 설치 스크립트입니다.
- LEAVE
읭? 시리얼 포트로 그냥 명령을 실행하네요.
뭔가 복잡한게 있을까 했지만.. 여기까지보면 정말 심플합니다.
물론 Send_Command.exe까지 풀어서 보면 재미있겠지만, 요즘은 피로도가 높으니 적당히고 자렵니다. 혹시라도 더 보시고 재미있는 결과 공유하고 싶으시면 내용이던 링크던 댓글 남겨주시옵소서…
LG Root Script.bat
@echo off
echo ---------------------------------
echo LG Root - One click script
echo Written by avicohh
echo ---------------------------------
echo.
echo Please make sure that USB debugging is enabled, and LG drivers are installed.
echo.
echo Starting adb server..
adb.exe kill-server > nul
adb.exe start-server > nul
echo.
echo Waiting for device..
adb.exe wait-for-device
echo.
echo Device detected!
echo.
echo Pushing files..
adb.exe push busybox /data/local/tmp/ && adb.exe push lg_root.sh /data/local/tmp/ && adb.exe push UPDATE-SuperSU-v2.46.zip /data/local/tmp/
echo.
echo Rebooting..
adb reboot
echo.
echo Looking for LG serial port..
echo.
adb.exe wait-for-device
for /f "tokens=2*" %%a in ('reg query HKLM\hardware\devicemap\SERIALCOMM /v \Device\LG*ANDNETDIAG* 2^>nul ^| find "REG_SZ" 2^>nul') do set "comPath=%%~b"
if "%comPath%" == "" (
echo Serial port not found, please insert the phone manually into Download mode.
echo.
echo Disconnect the USB cable and turn off the phone.
echo Then press and hold the Volume Up button, and while you're doing that connect the USB cable again.
echo.
echo Waiting for device..
echo.
) else (
echo Phone found at %comPath%!
echo.
echo Rebooting into Download mode..
echo.
Send_Command.exe \\.\%comPath% < enterDownload | echo off
echo Waiting for device..
echo.
ping 127.0.0.1 -n 15 | echo off
)
set comPath=
:wait-for-download
for /f "tokens=2*" %%a in ('reg query HKLM\hardware\devicemap\SERIALCOMM /v \Device\LG*ANDNETDIAG* 2^>nul ^| find "REG_SZ" 2^>nul') do set "comPath=%%~b"
if "%comPath%" == "" goto wait-for-download
echo Phone found at %comPath%!
echo.
echo Rooting phone..
echo.
echo If you don't see the SuperSu installer script runs within about a minute,
echo then the root failed.
echo.
ping 127.0.0.1 -n 15
Send_Command.exe \\.\%comPath% < installRoot
echo.
echo Rebooting..
Send_Command.exe \\.\%comPath% < leaveDownload | echo off
echo.
echo Done!
pause > nul | echo Press any key to exit..