Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
J
jadx
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
open-source
jadx
Commits
bd05be6f
Commit
bd05be6f
authored
Aug 22, 2018
by
Donlon
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Delete some changes
parent
dc578f98
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
43 additions
and
90 deletions
+43
-90
Deobfuscator.java
jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java
+8
-4
FieldInfo.java
jadx-core/src/main/java/jadx/core/dex/info/FieldInfo.java
+0
-4
ClassNode.java
jadx-core/src/main/java/jadx/core/dex/nodes/ClassNode.java
+1
-18
DexNode.java
jadx-core/src/main/java/jadx/core/dex/nodes/DexNode.java
+29
-22
RootNode.java
jadx-core/src/main/java/jadx/core/dex/nodes/RootNode.java
+5
-42
No files found.
jadx-core/src/main/java/jadx/core/deobf/Deobfuscator.java
View file @
bd05be6f
...
...
@@ -201,13 +201,17 @@ public class Deobfuscator {
private
void
collectClassHierarchy
(
ClassNode
cls
,
Set
<
ClassNode
>
collected
)
{
boolean
added
=
collected
.
add
(
cls
);
if
(
added
)
{
ClassNode
superClass
=
cls
.
getSuperClassNode
();
ArgType
superClass
=
cls
.
getSuperClass
();
if
(
superClass
!=
null
)
{
collectClassHierarchy
(
superClass
,
collected
);
ClassNode
superNode
=
cls
.
dex
().
resolveClass
(
superClass
);
if
(
superNode
!=
null
)
{
collectClassHierarchy
(
superNode
,
collected
);
}
}
for
(
ClassNode
interfaceNode
:
cls
.
getInterfaceNodes
())
{
if
(
interfaceNode
!=
null
)
{
for
(
ArgType
argType
:
cls
.
getInterfaces
())
{
ClassNode
interfaceNode
=
cls
.
dex
().
resolveClass
(
argType
);
if
(
interfaceNode
!=
null
)
{
collectClassHierarchy
(
interfaceNode
,
collected
);
}
}
...
...
jadx-core/src/main/java/jadx/core/dex/info/FieldInfo.java
View file @
bd05be6f
...
...
@@ -2,13 +2,9 @@ package jadx.core.dex.info;
import
com.android.dex.FieldId
;
import
com.android.dx.io.instructions.DecodedInstruction
;
import
jadx.core.codegen.TypeGen
;
import
jadx.core.dex.instructions.args.ArgType
;
import
jadx.core.dex.nodes.ClassNode
;
import
jadx.core.dex.nodes.DexNode
;
import
jadx.core.dex.nodes.FieldNode
;
import
jadx.core.dex.nodes.MethodNode
;
public
final
class
FieldInfo
{
...
...
jadx-core/src/main/java/jadx/core/dex/nodes/ClassNode.java
View file @
bd05be6f
...
...
@@ -48,9 +48,7 @@ public class ClassNode extends LineAttrNode implements ILoadable, IDexNode {
private
final
ClassInfo
clsInfo
;
private
final
AccessInfo
accessFlags
;
private
ArgType
superClass
;
private
ClassNode
superClassNode
;
private
List
<
ArgType
>
interfaces
;
private
List
<
ClassNode
>
interfaceNodes
;
//some element is null whose declaration is out of the dex files
private
Map
<
ArgType
,
List
<
ArgType
>>
genericMap
;
private
final
List
<
MethodNode
>
methods
;
...
...
@@ -74,17 +72,12 @@ public class ClassNode extends LineAttrNode implements ILoadable, IDexNode {
try
{
if
(
cls
.
getSupertypeIndex
()
==
DexNode
.
NO_INDEX
)
{
this
.
superClass
=
null
;
this
.
superClassNode
=
null
;
}
else
{
this
.
superClass
=
dex
.
getType
(
cls
.
getSupertypeIndex
());
this
.
superClassNode
=
dex
.
resolveClass
(
ClassInfo
.
fromType
(
dex
.
root
(),
superClass
));
}
this
.
interfaces
=
new
ArrayList
<>(
cls
.
getInterfaces
().
length
);
this
.
interfaceNodes
=
new
ArrayList
<>(
cls
.
getInterfaces
().
length
);
for
(
short
interfaceIdx
:
cls
.
getInterfaces
())
{
ArgType
intf
=
dex
.
getType
(
interfaceIdx
);
this
.
interfaces
.
add
(
intf
);
this
.
interfaceNodes
.
add
(
dex
.
resolveClass
(
intf
));
this
.
interfaces
.
add
(
dex
.
getType
(
interfaceIdx
));
}
if
(
cls
.
getClassDataOffset
()
!=
0
)
{
ClassData
clsData
=
dex
.
readClassData
(
cls
);
...
...
@@ -145,7 +138,6 @@ public class ClassNode extends LineAttrNode implements ILoadable, IDexNode {
this
.
dex
=
dex
;
this
.
clsInfo
=
clsInfo
;
this
.
interfaces
=
Collections
.
emptyList
();
this
.
interfaceNodes
=
Collections
.
emptyList
();
this
.
methods
=
Collections
.
emptyList
();
this
.
fields
=
Collections
.
emptyList
();
this
.
accessFlags
=
new
AccessInfo
(
AccessFlags
.
ACC_PUBLIC
|
AccessFlags
.
ACC_SYNTHETIC
,
AFType
.
CLASS
);
...
...
@@ -288,19 +280,10 @@ public class ClassNode extends LineAttrNode implements ILoadable, IDexNode {
return
superClass
;
}
@Nullable
public
ClassNode
getSuperClassNode
()
{
return
superClassNode
;
}
public
List
<
ArgType
>
getInterfaces
()
{
return
interfaces
;
}
public
List
<
ClassNode
>
getInterfaceNodes
()
{
return
interfaceNodes
;
}
public
Map
<
ArgType
,
List
<
ArgType
>>
getGenericMap
()
{
return
genericMap
;
}
...
...
jadx-core/src/main/java/jadx/core/dex/nodes/DexNode.java
View file @
bd05be6f
...
...
@@ -106,23 +106,27 @@ public class DexNode implements IDexNode {
}
@Nullable
MethodNode
deepResolveMethod
(
@NotNull
ClassNode
cls
,
MethodInfo
methodInfo
)
{
MethodNode
field
=
cls
.
searchMethodByName
(
methodInfo
.
getShortId
());
if
(
field
!=
null
)
{
return
field
;
MethodNode
deepResolveMethod
(
@NotNull
ClassNode
cls
,
String
signature
)
{
for
(
MethodNode
m
:
cls
.
getMethods
())
{
if
(
m
.
getMethodInfo
().
getShortId
().
startsWith
(
signature
))
{
return
m
;
}
}
MethodNode
found
;
ClassNode
superNode
=
cls
.
getSuperClassNode
();
ArgType
superClass
=
cls
.
getSuperClass
();
if
(
superClass
!=
null
)
{
ClassNode
superNode
=
resolveClass
(
superClass
);
if
(
superNode
!=
null
)
{
found
=
deepResolveMethod
(
superNode
,
methodInfo
);
found
=
deepResolveMethod
(
superNode
,
signature
);
if
(
found
!=
null
)
{
return
found
;
}
}
for
(
ClassNode
interfaceNode
:
cls
.
getInterfaceNodes
())
{
if
(
interfaceNode
!=
null
)
{
found
=
deepResolveMethod
(
interfaceNode
,
methodInfo
);
}
for
(
ArgType
iFaceType
:
cls
.
getInterfaces
())
{
ClassNode
iFaceNode
=
resolveClass
(
iFaceType
);
if
(
iFaceNode
!=
null
)
{
found
=
deepResolveMethod
(
iFaceNode
,
signature
);
if
(
found
!=
null
)
{
return
found
;
}
...
...
@@ -147,18 +151,21 @@ public class DexNode implements IDexNode {
if
(
field
!=
null
)
{
return
field
;
}
FieldNode
found
;
ClassNode
superNode
=
cls
.
getSuperClassNode
();
ArgType
superClass
=
cls
.
getSuperClass
();
if
(
superClass
!=
null
)
{
ClassNode
superNode
=
resolveClass
(
superClass
);
if
(
superNode
!=
null
)
{
found
=
deepResolveField
(
superNode
,
fieldInfo
);
if
(
found
!=
null
)
{
return
found
;
}
}
for
(
ClassNode
interfaceNode
:
cls
.
getInterfaceNodes
())
{
if
(
interfaceNode
!=
null
)
{
found
=
deepResolveField
(
interfaceNode
,
fieldInfo
);
}
for
(
ArgType
iFaceType
:
cls
.
getInterfaces
())
{
ClassNode
iFaceNode
=
resolveClass
(
iFaceType
);
if
(
iFaceNode
!=
null
)
{
found
=
deepResolveField
(
iFaceNode
,
fieldInfo
);
if
(
found
!=
null
)
{
return
found
;
}
...
...
jadx-core/src/main/java/jadx/core/dex/nodes/RootNode.java
View file @
bd05be6f
...
...
@@ -86,12 +86,9 @@ public class RootNode {
}
ResTableParser
parser
=
new
ResTableParser
();
try
{
ResourcesLoader
.
decodeStream
(
arsc
,
new
ResourcesLoader
.
ResourceDecoder
()
{
@Override
public
ResContainer
decode
(
long
size
,
InputStream
is
)
throws
IOException
{
ResourcesLoader
.
decodeStream
(
arsc
,
(
size
,
is
)
->
{
parser
.
decode
(
is
);
return
null
;
}
});
}
catch
(
JadxException
e
)
{
LOG
.
error
(
"Failed to parse '.arsc' file"
,
e
);
...
...
@@ -183,24 +180,7 @@ public class RootNode {
if
(
cls
==
null
)
{
return
null
;
}
MethodNode
resolved
;
//most of the time, the method node could be found in current dex.
DexNode
declDex
=
cls
.
dex
();
resolved
=
declDex
.
deepResolveMethod
(
cls
,
mth
);
if
(
resolved
!=
null
){
return
resolved
;
}
for
(
DexNode
dexNode
:
dexNodes
)
{
if
(
dexNodes
==
declDex
)
{
continue
;
}
resolved
=
dexNode
.
deepResolveMethod
(
cls
,
mth
);
if
(
resolved
!=
null
){
return
resolved
;
}
}
return
null
;
return
cls
.
dex
().
deepResolveMethod
(
cls
,
mth
.
makeSignature
(
false
));
}
@Nullable
...
...
@@ -209,24 +189,7 @@ public class RootNode {
if
(
cls
==
null
)
{
return
null
;
}
FieldNode
resolved
;
//most of the time, the field node could be found in current dex.
DexNode
declDex
=
cls
.
dex
();
resolved
=
declDex
.
deepResolveField
(
cls
,
field
);
if
(
resolved
!=
null
){
return
resolved
;
}
for
(
DexNode
dexNode
:
dexNodes
)
{
if
(
dexNodes
==
declDex
)
{
continue
;
}
resolved
=
dexNode
.
deepResolveField
(
cls
,
field
);
if
(
resolved
!=
null
){
return
resolved
;
}
}
return
null
;
return
cls
.
dex
().
deepResolveField
(
cls
,
field
);
}
public
List
<
DexNode
>
getDexNodes
()
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment