summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar jeff2015-01-06 00:44:16 -0500
committerGravatar jeff2015-01-06 00:44:16 -0500
commite28d1efd91912a60bdbf30f01011b18018075629 (patch)
treecc9d1e2b2d29cdf2c3ea9e63850199e2ee46d593
parentreverting to GPL license (diff)
downloadenigma-e28d1efd91912a60bdbf30f01011b18018075629.tar.gz
enigma-e28d1efd91912a60bdbf30f01011b18018075629.tar.xz
enigma-e28d1efd91912a60bdbf30f01011b18018075629.zip
got rid of gradle in favor of ivy+ssjb
-rw-r--r--.hgignore14
-rw-r--r--build.gradle135
-rw-r--r--build.py57
-rw-r--r--ivy.xml13
-rw-r--r--libs/procyon-decompiler-0.5.26-enigma.jarbin0 -> 1757481 bytes
-rw-r--r--readme.gui.txt (renamed from readme.txt)0
-rw-r--r--readme.translate.txt12
-rw-r--r--ssjb.py163
8 files changed, 251 insertions, 143 deletions
diff --git a/.hgignore b/.hgignore
index d552dedf..9ff982e6 100644
--- a/.hgignore
+++ b/.hgignore
@@ -1,17 +1,15 @@
1 1
2syntax: regexp 2syntax: regexp
3^\.classpath$ 3^\.
4syntax: regexp 4syntax: regexp
5^\.project$ 5^bin$
6syntax: regexp 6syntax: regexp
7^\.gradle$ 7^lib$
8syntax: regexp
9^\.settings$
10syntax: regexp
11^libs$
12syntax: regexp 8syntax: regexp
13^build$ 9^build$
14syntax: regexp 10syntax: regexp
15^data$ 11^data$
16syntax: regexp 12syntax: regexp
17^input$ \ No newline at end of file 13^input$
14syntax: regexp
15^ivy$ \ No newline at end of file
diff --git a/build.gradle b/build.gradle
deleted file mode 100644
index ce4b65b8..00000000
--- a/build.gradle
+++ /dev/null
@@ -1,135 +0,0 @@
1
2buildscript {
3 repositories {
4 mavenCentral()
5 }
6
7 dependencies {
8 classpath "eu.appsatori:gradle-fatjar-plugin:0.2-rc1"
9 classpath "net.sf.proguard:proguard-gradle:5.0"
10 }
11}
12
13apply plugin: "java"
14apply plugin: "eclipse"
15apply plugin: "maven"
16apply plugin: "fatjar"
17
18sourceCompatibility = 1.7
19targetCompatibility = 1.7
20
21group = "com.cuchazinteractive"
22archivesBaseName = "enigma"
23version = "0.6b"
24
25sourceSets {
26 main {
27 java {
28 srcDir "src"
29 }
30 resources {
31 srcDir "conf"
32 }
33 }
34 test {
35 java {
36 srcDir "test"
37 }
38 }
39}
40
41repositories {
42 mavenCentral()
43}
44
45dependencies {
46 compile fileTree( dir: "libs", include: "*.jar" )
47 compile "de.sciss:jsyntaxpane:1.0.0"
48 compile "com.google.guava:guava:17.0"
49 compile "org.javassist:javassist:3.18.1-GA"
50
51 testCompile "junit:junit:4.11"
52 testCompile "org.hamcrest:hamcrest-all:1.3"
53}
54
55fatJar {
56 from( "." ) {
57 include( "*.txt" )
58 }
59 manifest {
60 attributes(
61 "Title": archivesBaseName,
62 "Manifest-Version": "1.0",
63 "Version": version,
64 "Main-Class" : "cuchaz.enigma.Main"
65 )
66 }
67}
68
69task jarLoneClass( type: Jar ) {
70 from( sourceSets.test.output ) {
71 include( "cuchaz/enigma/inputs/Keep.class" )
72 include( "cuchaz/enigma/inputs/loneClass/**" )
73 }
74 archiveName( "testLoneClass.jar" )
75}
76
77task jarInheritanceTree( type: Jar ) {
78 from( sourceSets.test.output ) {
79 include( "cuchaz/enigma/inputs/Keep.class" )
80 include( "cuchaz/enigma/inputs/inheritanceTree/**" )
81 }
82 archiveName( "testInheritanceTree.jar" )
83}
84
85task jarConstructors( type: Jar ) {
86 from( sourceSets.test.output ) {
87 include( "cuchaz/enigma/inputs/Keep.class" )
88 include( "cuchaz/enigma/inputs/constructors/**" )
89 }
90 archiveName( "testConstructors.jar" )
91}
92
93task jarInnerClasses( type: Jar ) {
94 from( sourceSets.test.output ) {
95 include( "cuchaz/enigma/inputs/Keep.class" )
96 include( "cuchaz/enigma/inputs/innerClasses/**" )
97 }
98 archiveName( "testInnerClasses.jar" )
99}
100
101tasks.withType( proguard.gradle.ProGuardTask ) {
102 libraryjars( "${System.getProperty('java.home')}/lib/rt.jar" )
103 overloadaggressively
104 repackageclasses
105 allowaccessmodification
106 dontoptimize
107 dontshrink
108 keep( "class cuchaz.enigma.inputs.Keep" )
109}
110
111task obfLoneClass( type: proguard.gradle.ProGuardTask, dependsOn: jarLoneClass ) {
112 def name = "LoneClass"
113 injars( "build/libs/test${name}.jar" )
114 outjars( "build/libs/test${name}.obf.jar" )
115}
116
117task obfInheritanceTree( type: proguard.gradle.ProGuardTask, dependsOn: jarInheritanceTree ) {
118 def name = "InheritanceTree"
119 injars( "build/libs/test${name}.jar" )
120 outjars( "build/libs/test${name}.obf.jar" )
121}
122
123task obfConstructors( type: proguard.gradle.ProGuardTask, dependsOn: jarConstructors ) {
124 def name = "Constructors"
125 injars( "build/libs/test${name}.jar" )
126 outjars( "build/libs/test${name}.obf.jar" )
127}
128
129task obfInnerClasses( type: proguard.gradle.ProGuardTask, dependsOn: jarInnerClasses ) {
130 def name = "InnerClasses"
131 injars( "build/libs/test${name}.jar" )
132 outjars( "build/libs/test${name}.obf.jar" )
133}
134
135task obfTestCases( dependsOn: tasks.withType( proguard.gradle.ProGuardTask ) )
diff --git a/build.py b/build.py
new file mode 100644
index 00000000..69182514
--- /dev/null
+++ b/build.py
@@ -0,0 +1,57 @@
1
2import os
3import ssjb
4
5# settings
6projectName = "enigma"
7version = "0.6b"
8author = "Cuchaz"
9
10dirBin = "bin"
11dirBuild = "build"
12dirTemp = os.path.join(dirBuild, "tmp")
13
14
15def getJarFullName(name) :
16 return "%s-%s-%s.jar" % (projectName, name, version)
17
18def buildGuiJar():
19 jarName = "gui"
20 os.makedirs(dirTemp)
21 ssjb.copyFiles(dirTemp, dirBin, ssjb.findFiles(dirBin))
22 ssjb.unpackJars(dirTemp, "ivy/bundles", recursive=True)
23 ssjb.unpackJars(dirTemp, "ivy/jars", recursive=True)
24 ssjb.unpackJars(dirTemp, "libs", recursive=True)
25 ssjb.delete(os.path.join(dirTemp, "LICENSE.txt"))
26 ssjb.copyFile(dirTemp, "license.APL2.txt")
27 ssjb.copyFile(dirTemp, "license.GPL3.txt")
28 ssjb.copyFile(dirTemp, "readme.gui.txt", renameTo="readme.txt")
29 manifest = ssjb.buildManifest("%s-%s" % (projectName, jarName), version, author, "cuchaz.enigma.Main")
30 ssjb.jar(os.path.join(dirBuild, getJarFullName(jarName)), dirTemp, manifest=manifest)
31 ssjb.delete(dirTemp)
32
33def buildTranslateJar():
34 jarName = "translate"
35 os.makedirs(dirTemp)
36 files = ssjb.findFiles(dirBin, "cuchaz/enigma/mapping/*")
37 files += ssjb.findFiles(dirBin, "cuchaz/enigma/bytecode/*")
38 ssjb.copyFiles(dirTemp, dirBin, files)
39 ssjb.copyFile(dirTemp, "license.GPL3.txt", renameTo="license.txt")
40 ssjb.copyFile(dirTemp, "readme.translate.txt", renameTo="readme.txt")
41 manifest = ssjb.buildManifest("%s-%s" % (projectName, jarName), version, author)
42 ssjb.jar(os.path.join(dirBuild, getJarFullName(jarName)), dirTemp, manifest=manifest)
43 ssjb.delete(dirTemp)
44
45def taskMain():
46 ssjb.delete(dirBuild)
47 os.makedirs(dirBuild)
48 buildGuiJar()
49 buildTranslateJar()
50
51
52ssjb.registerTask("main", taskMain)
53
54
55if __name__ == "__main__":
56 ssjb.run()
57
diff --git a/ivy.xml b/ivy.xml
new file mode 100644
index 00000000..aa9d1f84
--- /dev/null
+++ b/ivy.xml
@@ -0,0 +1,13 @@
1<?xml version="1.0" encoding="ISO-8859-1"?>
2<ivy-module version="2.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://ant.apache.org/ivy/schemas/ivy.xsd">
3 <info organisation="com.cuchazinteractive" module="Enigma" status="integration"/>
4 <dependencies>
5 <dependency org="com.google.guava" name="guava" rev="17.0" transitive="false"/>
6 <dependency org="de.sciss" name="jsyntaxpane" rev="1.0.0" transitive="false"/>
7 <dependency org="org.javassist" name="javassist" rev="3.18.1-GA" transitive="false"/>
8
9 <!-- for testing -->
10 <dependency org="junit" name="junit" rev="4.11" transitive="false"/>
11 <dependency org="org.hamcrest" name="hamcrest-all" rev="1.3" transitive="false"/>
12 </dependencies>
13</ivy-module>
diff --git a/libs/procyon-decompiler-0.5.26-enigma.jar b/libs/procyon-decompiler-0.5.26-enigma.jar
new file mode 100644
index 00000000..4a3737ee
--- /dev/null
+++ b/libs/procyon-decompiler-0.5.26-enigma.jar
Binary files differ
diff --git a/readme.txt b/readme.gui.txt
index 81f985a0..81f985a0 100644
--- a/readme.txt
+++ b/readme.gui.txt
diff --git a/readme.translate.txt b/readme.translate.txt
new file mode 100644
index 00000000..455d16ed
--- /dev/null
+++ b/readme.translate.txt
@@ -0,0 +1,12 @@
1
2Enigma v0.6 beta
3A tool for deobfuscation of Java bytecode
4
5Copyright Jeff Martin, 2014
6
7
8LICENSE
9
10Enigma is distributed under the GNU General Public license version 3
11
12A copy of the GNU General Public license verion 3 has been included in this distribution.
diff --git a/ssjb.py b/ssjb.py
new file mode 100644
index 00000000..d3e2bb52
--- /dev/null
+++ b/ssjb.py
@@ -0,0 +1,163 @@
1
2# stupidly simple jar builder
3# Jeff Martin
4# 2015-01-05
5
6import os
7import sys
8import shutil
9import subprocess
10import zipfile
11import tempfile
12import re
13import fnmatch
14
15
16# setup tasks
17tasks = {}
18
19def registerTask(name, func):
20 tasks[name] = func
21
22def run():
23
24 # get the task name
25 taskName = "main"
26 if len(sys.argv) > 1:
27 taskName = sys.argv[1]
28
29 # find that task
30 try:
31 task = tasks[taskName]
32 except:
33 print "Couldn't find task: %s" % taskName
34 return
35
36 # run it!
37 task()
38
39
40# set up the default main task
41def mainTask():
42 print "The main task doesn't do anything by default"
43
44registerTask("main", mainTask)
45
46
47# library of useful functions
48
49def findFiles(dirSrc, pattern=None):
50 out = []
51 for root, dirs, files in os.walk(dirSrc):
52 for file in files:
53 path = os.path.join(root, file)[len(dirSrc) + 1:]
54 if pattern is None or fnmatch.fnmatch(path, pattern):
55 out.append(path)
56 return out
57
58def copyFile(dirDest, pathSrc, renameTo=None):
59 (dirParent, filename) = os.path.split(pathSrc)
60 if renameTo is None:
61 renameTo = filename
62 pathDest = os.path.join(dirDest, renameTo)
63 shutil.copy2(pathSrc, pathDest)
64
65def copyFiles(dirDest, dirSrc, paths):
66 for path in paths:
67 pathSrc = os.path.join(dirSrc, path)
68 pathDest = os.path.join(dirDest, path)
69 dirParent = os.path.dirname(pathDest)
70 if not os.path.isdir(dirParent):
71 os.makedirs(dirParent)
72 shutil.copy2(pathSrc, pathDest)
73
74def patternStringToRegex(patternString):
75
76 # escape special chars
77 patternString = re.escape(patternString)
78
79 # process ** and * wildcards
80 replacements = {
81 re.escape("**"): ".*",
82 re.escape("*"): "[^" + os.sep + "]+"
83 }
84 def getReplacement(match):
85 print "matched", match
86 return "a"
87 patternString = re.compile("(\\\\\*)+").sub(lambda m: replacements[m.group(0)], patternString)
88
89 return re.compile("^" + patternString + "$")
90
91def matchesAnyPath(path, patternStrings):
92 for patternString in patternStrings:
93 pattern = patternStringToRegex(patternString)
94 # TEMP
95 print path, pattern.match(path) is not None
96 if pattern.match(path) is not None:
97 return True
98 return False
99
100def delete(path):
101 try:
102 if os.path.isdir(path):
103 shutil.rmtree(path)
104 elif os.path.isfile(path):
105 os.remove(path)
106 except:
107 # don't care if it failed
108 pass
109
110def buildManifest(title, version, author, mainClass=None):
111 manifest = {
112 "Title": title,
113 "Version": version,
114 "Created-by": author
115 }
116 if mainClass is not None:
117 manifest["Main-Class"] = mainClass
118 return manifest
119
120def jar(pathOut, dirIn, dirRoot=None, manifest=None):
121
122 # build the base args
123 if dirRoot is None:
124 dirRoot = dirIn
125 dirIn = "."
126 invokeArgs = ["jar"]
127 filesArgs = ["-C", dirRoot, dirIn]
128
129 if manifest is not None:
130 # make a temp file for the manifest
131 tempFile, tempFilename = tempfile.mkstemp(text=True)
132 try:
133 # write the manifest
134 for (key, value) in manifest.iteritems():
135 os.write(tempFile, "%s: %s\n" % (key, value))
136 os.close(tempFile)
137
138 # build the jar with a manifest
139 subprocess.call(invokeArgs + ["cmf", tempFilename, pathOut] + filesArgs)
140
141 finally:
142 os.remove(tempFilename)
143 else:
144 # just build the jar without a manifest
145 subprocess.call(invokeArgs + ["cf", pathOut] + filesArgs)
146
147 print "Wrote jar: %s" % pathOut
148
149def unpackJar(dirOut, pathJar):
150 with zipfile.ZipFile(pathJar) as zf:
151 for member in zf.infolist():
152 zf.extract(member, dirOut)
153 print "Unpacked jar: %s" % pathJar
154
155def unpackJars(dirOut, dirJars, recursive=False):
156 for name in os.listdir(dirJars):
157 path = os.path.join(dirJars, name)
158 if os.path.isfile(path):
159 if name[-4:] == ".jar":
160 unpackJar(dirOut, path)
161 elif os.path.isdir(path) and recursive:
162 unpackJars(dirOut, path, recursive)
163