All Versions
Latest Version
Avg Release Cycle
206 days
Latest Release
1546 days ago

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 and monitor-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 and move-exception
    • ๐Ÿ‘Œ Improved correctness for instance-of and check-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
  • 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 ifs 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:
    ๐Ÿฑ graph-before

    Graph after optimization:
    ๐Ÿฑ graph-after

  • v0.8.0 Changes

    September 28, 2015

    ๐Ÿš€ I ran this on some malware and it didn't crash. To celebrate, here's a release!