>운영 및 유지보수 >안전 >Android의 리버스 엔지니어링 방법은 무엇입니까?

Android의 리버스 엔지니어링 방법은 무엇입니까?

WBOY
WBOY앞으로
2023-05-22 09:55:281564검색

1. 무기 획득

샤오바이, 이 무기를 사용하려면 먼저 경락을 열어야 합니다.

1.1 Meridians(환경)

1.루트, 휴대폰 루트, 루트가 없으면 안드로이드가 없습니다. 루트 자오선을 열어야만 후속 작업을 진행할 수 있습니다.

2. Xposed 프레임워크 설치. Xposed를 무기로 사용하려면 먼저 해당 프레임워크를 선택해야 사용할 수 있습니다.

1.2 무기

xposedBridgeApi-82.jar.jar.

이게 우리의 무기 샤오바이 자, 이 무기의 기본 사용법을 보여드리겠습니다.

2. 무기 데모

Android의 리버스 엔지니어링 방법은 무엇입니까?

여기에서는 Xposed 무기를 사용하여 packageName을 가로채서 출력합니다.

사실 이 무기는 내부의 힘과 결합될 때만 최대 성능을 발휘할 수 있습니다.

내면의 힘으로 스승님, 이걸 어떻게 하시나요?

서두르지 말고 차근차근 해나가자.

0x02 Hook의 내부 근력 1단계 연습하기 (Android Studio 3.0 +Xposed)

Xiaobai, 먼저 내부 근력 1단계 작동 경혈부터 가르쳐 드리겠습니다. 잘 들어보세요.

안드로이드 스튜디오 3.0 기본 구성

먼저 콘텐츠 실행을 위한 환경을 제공하겠습니다.

(1) 먼저 Activity가 필요하지 않은 프로젝트를 빌드합니다.

Android의 리버스 엔지니어링 방법은 무엇입니까?

(2) 그런 다음 jar 패키지를 가져옵니다. 그리고 라이브러리로 추가를 마우스 오른쪽 버튼으로 클릭합니다.

Android의 리버스 엔지니어링 방법은 무엇입니까?

(3) Androidmanifest.xml 파일을 작성합니다.

Android의 리버스 엔지니어링 방법은 무엇입니까?

  <meta-data></meta-data>
        <meta-data></meta-data>
        <meta-data></meta-data>

(4) 종속성 방법 수정

jar 패키지의 내용이 이미 Xposed에 존재하므로 다시 패킹하면 충돌이 발생합니다.

Android의 리버스 엔지니어링 방법은 무엇입니까?

(5) 기본 Xposed 모델 생성

Alt+Enter를 사용하여 메소드를 구현하세요.

Android의 리버스 엔지니어링 방법은 무엇입니까?

샤오바이, 내 장황한 말 좀 들어봐.

handleLoadPackage, 이 메서드는 애플리케이션 패키지를 로드할 때 사용자 작업을 수행하는 데 사용됩니다.

LoadPackageParam loadPackageParam: 이 매개변수에는 로드된 애플리케이션의 일부 기본 정보가 포함됩니다.

내면의 힘의 실현

Android의 리버스 엔지니어링 방법은 무엇입니까?

한 문장이면 이룰 수 있습니다.

XposedBridge.log("HAI_app: " + loadPackageParam.packageName);

여기서 XposedBridge.log가 무엇인지 생각해 봐야 합니다.

posedBridge.log의 인쇄는 xposed 프레임워크 시작 프로그램의 로깅 기능으로 출력됩니다. 그러면 우리도 보기가 더 쉬워질 것입니다.

구성의 마지막 단계를 수행해 보겠습니다. 시작 장소를 설정합니다.

새 자산 디렉터리에 새 파일을 만듭니다. 파일 이름은 xposed_init입니다.

패키지 이름 + 클래스를 작성하세요.

테스트 결과

빌드 APK

테스트를 위해 설치되었습니다.

휴대폰에 설치한 다음 다시 시작하세요.

Android의 리버스 엔지니어링 방법은 무엇입니까?

생각

사부라는 사람이 인도하고, 실천은 개인에 달려있습니다. 그래서.

알겠습니다, 스승님, 이 간단한 방법으로 필터링할 수 있나요? 예를 들어, 간단한 분석 시스템을 작성해 보세요. 아니면 다른 것으로 필터링할 수도 있습니다. 먼저 제가 직접 해볼께요.

Xiaobai의 자체 재배

이 운영 경로를 사용하여 등록을 분석하고 필터링합니다.

간단하게 시도해 보세요.

어제 배운 Java 문자열의 하위 문자열을 사용하여 문자열을 필터링합니다.

Android의 리버스 엔지니어링 방법은 무엇입니까?

그런 다음 테스트해 보세요.

물론, 이것도 더 자세히 설명할 수 있습니다.

0x03 나무더미 실전연습

샤오바이, 어서, 스승님께서 나무더미를 찾아주셨으니 내가 펀칭해 드리겠습니다. 이 후크는 어떻게 작동하고 어떻게 대처합니까? 잘 배우십시오.

저는 스승님을 알고 있습니다.

스테이크 정보 수집

1. 기본 정보

샤오바이, 이 기본 정보를 수집하기 위해 이전에 사용했던 무기를 사용해 봅시다.

스승님, 우리는 주로 어떤 정보를 수집하나요?

글쎄, 우리는 일반적으로 수집해야 합니다.

1. 나무 더미의 패키지 이름
2. 나무 더미의 간단한 논리
....

샤오 바이, 이건 직접 수집할 수 있습니다.

초보자를 위한 작업

첫 번째는 패키지 이름입니다. 무기, apkhelper를 사용하십시오.

Android의 리버스 엔지니어링 방법은 무엇입니까?

패키지 이름 정보를 가져옵니다. com.example.login

그리고 간단한 논리 전화.

Android의 리버스 엔지니어링 방법은 무엇입니까?

2.反编译信息收集

小白啊,收集玩了吗?

收集完了师傅。

好,我们接下来收集反编译信息。知己知彼,方能百战不殆。

师傅的操作

首先我们来看看我们要收集的东西。

1.关键的类名。
2.关键的函数位置。

来用Android Killer武器反编译木桩。

定位。

查看类名,进行记录。

Android의 리버스 엔지니어링 방법은 무엇입니까?

小白,看清楚,是这个样子进行记录。

原来是这样。com/example/login/MainActivity;
但是我们要改成这样的。com.example.login.MainActivity

现在就需要定位到关键函数了。

Android의 리버스 엔지니어링 방법은 무엇입니까?

这个login就是我们要Hook住的函数啦。

Ljava/lang/String;Ljava/lang/String;从这里我们可以看到是两个输入内容。并且类型是String。我们现在要做的就是要hook住这个输出,然后对其进行输出。

木桩实战练习

环境搭建

好了,小白,前期资料收集的差不多了。我现在要发功了,要看清楚我的使用哦。

先把环境调整好。

然后先做一个简单的过滤。

Android의 리버스 엔지니어링 방법은 무엇입니까?

这个时候,收集的包名就排上用场了。

因为是hook的是方法,所以我们这里使用一个方法。

Android의 리버스 엔지니어링 방법은 무엇입니까?

第一个参数,要hook的包名+方法名,这个也是我们收集好的。

第二个参数不动

第三个参数方法名

第四个参数 输入的参数

我们有两个String类型的参数,所以才这样写

最后一个参数,就是做一个监听。可以监听这个方法的使用前和使用后。

f for木桩

小白,一切准备你就须,看为师给你f这个木桩。

Android의 리버스 엔지니어링 방법은 무엇입니까?

小白,你看这第一招

XposedBridge.log("ZHUZHU520:LoginName:"+param.args[0]);

这一招搞它的第一个输入。

然后再来看这一招

XposedBridge.log("ZHUZHU520:Passward:"+param.args[1]);

这一招搞它的第二个输入。

然后最后一招。

XposedBridge.log("ZHUZHU520:end???:"+param.getResult());

这一招就是拦截返回值。

小白啊,这里有一个需要思考的内容。

这样hook的意义或者作用是什么?

小白的思考

师傅,我觉得首先,这样可以拦截下输入的参数,还有返回的值。如果在hook里做一个转发信息的技能。那不就可以成功的对登录账户的人进行账号和密码的获取。

这不就是和钓鱼一样了嘛。

我觉得这是一个很大的漏洞,如果登录厂商没有做相应的处理,那这里我可以拿这个搞死他。

好了,小白,你说的很对,我们现在来对这个进行下测试吧。

f 木桩测试

Android의 리버스 엔지니어링 방법은 무엇입니까?

小白啊,你看这里我们就成功的拦截内容了。小白分配给你一个任务,使用hook f来拦截木桩,并确保不管我是否输入正确,木桩能够成功登录。

0x04 木桩f进阶(小白的自我进步)

XposedBridge.log("ZHUZHU520:end???:"+param.getResult());

思考一

师傅之前使用了一个param.getResult()获取了返回值,那我是不是可以使用相同的set方法,重新对这个进行赋值啊。

根据各种方式,我们知道了这里的返回值就是Z,也就是布尔型。

说干就干,争取f掉木桩。

Android의 리버스 엔지니어링 방법은 무엇입니까?

위 내용은 Android의 리버스 엔지니어링 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 yisu.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제