Changelog History
-
v1.3.0 Changes
March 30, 2020๐ This version has a few fixes but mostly the new new Smali Debugger tool which allows you to step through smalivm executions line by line, set breakpoints, etc. It was an experiment to see if smalivm could easily be used as a library (it's easier now) and to play with Kotlin. Check it out and let me know what you think.
๐ Version bump to 1.3.x because of some changes to the API.
๐ฒ Here's the change log.
- ๐ Many small improvements to make smalivm a better library for more than just simplify
- ๐ Fix correctness bugs around invoking methods and maintaining correct state
- โก๏ธ Updated dependencies
-
v1.2.1 Changes
January 24, 2019๐ It's been a while since the last release, and there have been quite a few changes. So, here's a release!
- ๐ Better console output by showing progress / remaining classes
- ๐ Better error handling (improved stability)
- ๐ Improved Enum and Array handling
- โก๏ธ Updated dependencies
- Cleaned up the API for smalivm
- โ Modernized ObfuscatedApp's encryption obfuscation so it's a more realistic test
- โ Added
Object.getClass
emulation and peephole optimization - ๐ Lots of little bug fixes
-
v1.2.0 Changes
July 30, 2017๐ This release fixes a lot of bugs and changes the output format to make it a little easier to read. Thanks to the many people who reported bugs. You brave souls!
Here's a quick overview of the changes:
- Visual indicator of progress through classes and methods, and some simple run time stats
- ๐ Fix for enum instantiation, objects created via reflection have more correct type
- ๐ Improved type flow, when a method can't be invoked because arguments aren't valid, don't use type from method signature unless it's more specific than type of the argument
- ๐ Improved correctness for
aput
ops - ๐ Improved correctness when determining consensus type
- ๐ Improved correctness when updating argument identities during multiverse collapse
- โก๏ธ Updated dependencies, notably dexlib updated to 2.2.1
- โก๏ธ Updated reference framework to Android-25
- Implemented
monitor-enter
andmonitor-exit
opcodes (used to be handled by UnknownOp)
-
v1.1.0 Changes
August 06, 2016๐ New release. It's not just a point release because there were some API changes in smalivm. Here's the changelog:
- ๐ Allow static initialization of fields using literals, e.g.
.field myInt:I = 0x42
- ๐ Fixed several problems with looking up inherited fields
- ๐ Better merging of states from called methods
- ๐ Better exception handling - implement
throw
andmove-exception
- ๐ Improved correctness for
instance-of
andcheck-cast
ops - ๐ Improved correctness for
java.lang.reflect.Field.get()
emulated method - ๐ API change - much of the functionality in ClassManager was moved to VirtualGeneric
- ๐ Fixed many small bugs and possibly added a few new ones
- ๐ Fixed embarrassingly large number of typos
- ๐ Allow static initialization of fields using literals, e.g.
-
v1.0.0 Changes
February 23, 2016๐ Code seems to be stable enough for a 1.0 release. The download is a little big, but there's an entire Android framework floating around in there, so there's not much that can be done without other tradeoffs.
๐ Changes:
- Lots of correctness improvements
- Optimization output counts are multi-line and, I think, easier to read
- ๐ Improve handling of null values
-
v1.0.0-M1 Changes
February 15, 2016๐ It's been a few years since this all started, but there is finally a milestone release for v1.0. The next few milestones will be focused on fixing bugs and shaking out any issues made by some of the drastic changes in the past several commits.
๐ Changes:
- Dynamically create JVM classes for input and framework Smali
- ๐ฏ Speed up cloning by making a Cloner which knows about immutable Android classes meaning fewer objects need deep cloning
- โก๏ธ Update framework reference Smali to to Android API 23
- ๐ Various bug fixes and improvements (and probably some new bugs!)
-
v0.9.1 Changes
December 18, 2015๐ Changes:
- ๐ improved execution graph manipulation
- rewrote and improved CLI
- made progress towards proper Java Class object emulation
- ๐ greatly improved test performance
- ๐ fixed lots of correctness problems
- cleaned up smalivm API by preferring simple return values and improving naming
-
v0.9.0 Changes
October 18, 2015๐ Changes:
- More robust manipulation of execution graphs
- โ Added optimization for
if
s with constant predicates - โ Added --max-execution-time for long running methods
- โ Added
ExecutionGrapher
which gives a GraphViz compatible DOT file for an execution graph. Screen shots below. - ๐ Improved dead code detection
- Mostly eliminated method re-execution during optimization
- โ Many more tests and bug fixes
Here's a small example method graph to show what
ExecutionGrapher
does. Each node in the graph is the execution of some instruction, along with all the relevant context at that point. This is before optimization:
๐ฑ -
v0.8.0 Changes
September 28, 2015๐ I ran this on some malware and it didn't crash. To celebrate, here's a release!