Skip to content

Commit

Permalink
AndroTickler v2.4
Browse files Browse the repository at this point in the history
  • Loading branch information
2eldeed committed Mar 10, 2020
1 parent 0852b09 commit a241ac7
Show file tree
Hide file tree
Showing 84 changed files with 1,732 additions and 268 deletions.
6 changes: 5 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -29,8 +29,12 @@ Other tools are required for some features, but AndroTickler can still run witho
How to use it
=============
1) Build tool from code

gradle build

2) Move AndroTickler.jar is to the same directory as Tickler_lib directory and Tickler.conf file (automatically created in build/libs)
3) Connect your Android device with the application-to-test installed on
3) Set dex2jar to executable (libs/notJars//dex2jar-2.1/d2j-dex2jar.sh and libs/notJars//dex2jar-2.1/d2j_invoke.sh)
4) Connect your Android device with the application-to-test installed on


The current version does the following:
Expand Down
1 change: 1 addition & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ dependencies {
compile files('libs/jars/apktool_2.2.2.jar')
compile files('libs/jars/commons-codec-1.10.jar')
compile files('libs/jars/jd-core-java-1.2.jar')
compile files('libs/jars/json-simple-1.1.1.jar')
runtime files('libs/jars/commons-cli-1.3.jar')
runtime fileTree(dir: 'libs/jars', include: '*.jar')
}
Expand Down
Binary file added libs/jars/aacommons-cli-1.3.jar
Binary file not shown.
Binary file added libs/jars/apktool.jar
Binary file not shown.
Binary file added libs/jars/commons-cli-1.3.1.jar
Binary file not shown.
Binary file added libs/jars/commons-io-2.6.jar
Binary file not shown.
Binary file added libs/jars/json-simple-1.1.1.jar
Binary file not shown.
Binary file added libs/jars/procyon-decompiler-0.5.30.jar
Binary file not shown.
1 change: 1 addition & 0 deletions src/main/java/.gradle/2.10/taskArtifacts/cache.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
#Fri Mar 06 02:03:30 CET 2020
Binary file not shown.
Binary file not shown.
Binary file not shown.
59 changes: 53 additions & 6 deletions src/main/java/actions/Comparer.java
100644 → 100755
Original file line number Diff line number Diff line change
Expand Up @@ -25,28 +25,32 @@
import base.OtherUtil;
import commandExec.Commando;
import db.DatabaseTester;
import initialization.TicklerConst;
import initialization.TicklerVars;

public class Comparer {

private Commando commando;
private FileUtil fileTrans;
private CopyUtil copyz;
private String dataDirOld, extDirOld, storageOld;

public Comparer() {

this.copyz = new CopyUtil();
this.commando = new Commando();
this.fileTrans = new FileUtil();
this.fileTrans = new FileUtil();
}

public void diff(boolean detailed) {
/*
public void diffOld(boolean detailed) {
this.clearDataDirs();
this.copyz.copyDataDir(TicklerVars.appTickDir+"DataDirOld/");
System.out.println("\n\n>>>>>>>>>>>>>>>> Go crazy then press Enter to compare data directories....\n");
OtherUtil.pressAnyKeySilent();
//Copy both local and external storage
copyz.copyDataDir();
// copyz.copyStorage();
String command = "diff -rq "+ TicklerVars.appTickDir+"DataDirOld/ "+TicklerVars.appTickDir+"DataDir/";
String output = this.commando.executeCommand(command);
Expand All @@ -60,11 +64,46 @@ public void diff(boolean detailed) {
this.diffDetailed(output);
}
}
*/
public void diff(boolean detailed) {

//Init here
this.storageOld = TicklerVars.transferDir+TicklerConst.DIFF_OLD_STORAGE;
this.dataDirOld = this.storageOld+TicklerConst.DATA_DIR_NAME;
this.extDirOld = this.storageOld+TicklerConst.EXTERNAL_STORAGE_Dir;

this.clearDataDirs();
this.copyz.copyStorage(TicklerConst.DIFF_OLD_STORAGE);

System.out.println("\n\n>>>>>>>>>>>>>>>> Go crazy then press Enter to compare data directories....\n");
OtherUtil.pressAnyKeySilent();

copyz.copyStorage();

String command = "diff -rq "+ this.dataDirOld +" "+TicklerVars.dataDir;
String output = this.commando.executeCommand(command);
System.out.println(output.replace(TicklerVars.appTickDir, "[Tickler_App_Dir]/"));

// Quick and Dirty: Repeated for external storage
command = "diff -rq "+ this.extDirOld +" "+TicklerVars.extDataDir;
output = this.commando.executeCommand(command);
System.out.println(output.replace(TicklerVars.appTickDir, "[Tickler_App_Dir]/"));

if (output.isEmpty())
System.out.println("No change in the app's Data directory");
else
System.out.println("\n...Where [Tickler_App_Dir] is "+TicklerVars.appTickDir);

if (detailed){
this.diffDetailed(output);
}

}

/**
* A detailed output of changed files:
* 1) text files: classic diff output
* 2) DB files: query and show the difference
* 2) DB files: dump and show the difference
* @param output: output of undetailed diff
*/

Expand Down Expand Up @@ -143,9 +182,17 @@ private void compareDB(File f){
this.fileTrans.deleteFromHost(newDump);
}

/**
* Clears Datadir, ExtDataDir and their old versions before diff
*/
private void clearDataDirs(){
this.fileTrans.warnOverrideAndDelete(TicklerVars.appTickDir+"DataDirOld/");
this.fileTrans.warnOverrideAndDelete(TicklerVars.dataDir);
// this.fileTrans.warnOverrideAndDelete(TicklerVars.appTickDir+"DataDirOld/");
// this.fileTrans.warnOverrideAndDelete(TicklerVars.dataDir);

String[] directories = {TicklerVars.dataDir,TicklerVars.extDataDir,this.dataDirOld,this.extDirOld};
for (String dir: directories) {
this.fileTrans.warnOverrideAndDelete(dir);
}

}

Expand Down
181 changes: 181 additions & 0 deletions src/main/java/actions/Comparer_Old.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,181 @@
/*******************************************************************************
* Copyright 2017 Ahmad Abolhadid
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
******************************************************************************/
package actions;

import java.io.File;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import base.CopyUtil;
import base.FileUtil;
import base.OtherUtil;
import commandExec.Commando;
import db.DatabaseTester;
import initialization.TicklerConst;
import initialization.TicklerVars;

public class Comparer_Old {

private Commando commando;
private FileUtil fileTrans;
private CopyUtil copyz;
private String dataDirOld, extDirOld, storageOld;

public Comparer_Old() {

this.copyz = new CopyUtil();
this.commando = new Commando();
this.fileTrans = new FileUtil();
this.dataDirOld = TicklerVars.appTickDir+TicklerConst.DATA_DIR_OLD;
this.extDirOld = TicklerVars.appTickDir+TicklerConst.EXT_DIR_OLD;
this.storageOld = TicklerVars.appTickDir+"Storage_old/";
}

public void diffOld(boolean detailed) {
this.clearDataDirs();

this.copyz.copyDataDir(TicklerVars.appTickDir+"DataDirOld/");
System.out.println("\n\n>>>>>>>>>>>>>>>> Go crazy then press Enter to compare data directories....\n");
OtherUtil.pressAnyKeySilent();
//Copy both local and external storage
copyz.copyDataDir();
// copyz.copyStorage();

String command = "diff -rq "+ TicklerVars.appTickDir+"DataDirOld/ "+TicklerVars.appTickDir+"DataDir/";
String output = this.commando.executeCommand(command);
System.out.println(output.replace(TicklerVars.appTickDir, "[Tickler_App_Dir]/"));
if (output.isEmpty())
System.out.println("No change in the app's Data directory");
else
System.out.println("\n...Where [Tickler_App_Dir] is "+TicklerVars.appTickDir);

if (detailed){
this.diffDetailed(output);
}
}

public void diff(boolean detailed) {
this.clearDataDirs();
this.copyz.copyStorage(this.storageOld);

System.out.println("\n\n>>>>>>>>>>>>>>>> Go crazy then press Enter to compare data directories....\n");
OtherUtil.pressAnyKeySilent();

copyz.copyStorage();

String command = "diff -rq "+ this.dataDirOld +" "+TicklerVars.dataDir;


}

/**
* A detailed output of changed files:
* 1) text files: classic diff output
* 2) DB files: query and show the difference
* @param output: output of undetailed diff
*/

public void diffDetailed(String output){
System.out.println("\nDetailed Comparison result:\n===========================\n");

//1- get file names
ArrayList<String> diffFileNames = this.getDiffFileNames(output);
if (!diffFileNames.isEmpty()){
//2- diff files
for (String s:diffFileNames)
checkFileTypeAndCompare(s);
}
}

private ArrayList<String> getDiffFileNames(String output){
ArrayList<String> filePathsArray = new ArrayList<String>();

String[] opArray=output.split("\n");
if (opArray.length>0 && opArray[0]!=""){
for (String s:opArray)
{
Matcher m = Pattern.compile("differ$").matcher(s);
if (m.find()){
String filePath = s.split(" ")[1];
filePathsArray.add(filePath);
}
}
}
return filePathsArray;
}

private void checkFileTypeAndCompare(String fileName){
File f = new File(fileName);
String output,fileTypeCommand;
fileTypeCommand = this.fileTrans.fileType(f);
DatabaseTester dbT = new DatabaseTester();
///File is a text file or human readable
if (fileTypeCommand.contains("text")){
//File is a text file
this.compareTextfiles(fileName);
}
//If the file is a database file
else if (dbT.isFileDB(f)){
this.compareDB(f);
}
}
private void compareTextfiles(String fileName){
String command,output,fName;

fName=this.fileTrans.getFileNameFromPath(fileName);
System.out.println("---------- "+fName+" ----------");
command="diff "+fileName+" "+fileName.replace("DataDirOld", "DataDir");
output=this.commando.executeCommand(command);
System.out.println(output+"\n");

}

/**
* Comapres between 2 DBs by string diff their dumps
* @param f
*/
private void compareDB(File f){
DatabaseTester dbT = new DatabaseTester();
String filePath=f.getAbsolutePath();
String oldDump = dbT.dumpDBToFile(filePath,null);
String newDump = dbT.dumpDBToFile(filePath.replace("DataDirOld", "DataDir"),null);

System.out.println("------- Database File: "+f.getName()+" -------");

String command = "diff "+ oldDump+" "+newDump;
String output = this.commando.executeCommand(command);
System.out.println(output);

this.fileTrans.deleteFromHost(oldDump);
this.fileTrans.deleteFromHost(newDump);
}

/**
* Clears Datadir, ExtDataDir and their old versions before diff
*/
private void clearDataDirs(){
// this.fileTrans.warnOverrideAndDelete(TicklerVars.appTickDir+"DataDirOld/");
// this.fileTrans.warnOverrideAndDelete(TicklerVars.dataDir);

String[] directories = {TicklerVars.dataDir,TicklerVars.extDataDir,this.dataDirOld,this.extDirOld};
for (String dir: directories) {
this.fileTrans.warnOverrideAndDelete(dir);
}

}

}
Loading

0 comments on commit a241ac7

Please sign in to comment.