Please bear with me as I explain this situation.
Maybe 10 days ago I took up the challenge of reverse engineering an Android app. Learning from scratch, I installed ADB, Apktool, Android Studio, Notepad++ with Smali highlighting etc. My approach has been to write test programs in Android studio that mirror the workings of the APK, and then decompile with Apktool to help me do Smali modifications. I've been successful in modifying the application to log all HTTP requests, headers, cookies, and post data to the android log.
My next challenge was to figure out how an important algorithm in the app works. This is what stumped me. I spent the last 3 or 4 days spending the majority of my day analysing Smali code making almost no progress. Apparently the algorithm is done (at least in part if not mostly) in a native library with the .so extension.
One of the extremely frustrating things about Reverse engineering is how small the community is. There are very few resources on the web (At least compared to other things). I've probably bitten off more than I can chew. I always attempt difficult projects that are above my skill level. For this task, I'm guessing I need to become very familiar with ARM and I'll have to use IDA Pro to analyse the .so file? To explain my knowledge level:
- I have very little experience using Ollydbg in Windows (I have slight understanding of registers and CMP, JMP, ADD commands, etc.)
- I have no experience using IDA Pro. I'm quite new to reverse engineering, but I've had success with simple Smali modding because it's simple in some situations.
- I know basic Java (To be clear, I'm not a complete beginner, variables, for loops, arrays, classes (to an extent) are second nature to me)
- I know basic C++ if not more than basic
- I've done a lot of VB.NET programming.
- I feel quite knowledgeable in Python.
So I'm experienced with programming, but not really reverse engineering. How in over my head am I attempting to understand this complex native library (When I already know practically nothing about native libraries/JNI)? Could the professionals here please give me some specific examples of how I can get to the level where I am knowledgeable enough to complete my goal? I don't want to just give up because this is a difficult challenge. Please give me suggestions of how I can progress enough to complete my goal. I assume I'll need to learn IDA Pro and how ARM works.
Thanks
F5 key
works on your SO file functions.. you could doCTRL+F5
and read code which if you understand programming language you would have not so much difficulty understanding the algorithm it pumps out. If you cannot do F5.. then yes.. you will have more difficulty.. since it's.so
to my understanding this means linux.. I only did.DLL
/.EXE
with IDA PRO have no idea how.so
files handle.. could be exactly the same just different operating systems..so
file you need and trace it in ollydbg.. I'm sure ollydbg is ported to linux and could load up.so
files, so a artificial call of that export making a simple program that loads up that.so
file and calls that export and trace it. If all else falls.. and you need answer to that algorithm what I usually do is make TCP/UDP servers for a specific.dll
file call then retrieve the answers by sending specific packets to my server.idaq
? andidaq64
? It should work.. I found this post indicating it's the same thing on windows and linux reverseengineering.stackexchange.com/questions/2664/…