Whats New
Whats New
06/25/13:
---------
--sig
--ent
06/29/13:
---------
-S -v - shows not only nm(1) style symbols, but the libraries they are taken from
dyldinfo's -opcodes is supported
Jtool now handles fat binaries on Linux just fine.
07/05/13:
---------
07/09/13:
---------
07/12/13:
---------
07/18/13:
---------
3) Last, but by far NOT least: JTool now correctly resolves stubs in disassembly!
This will show external (dylib) function calls. This puts JTool on par with otool
(grrrr) and IDA. In fact, seeing as JTool resolves PC relative and neither of the
other two do, it might just come a bit ahead.
07/19/13:
---------
Color was always the default, but because disassembly output is volumous, it was
disabled when piping. Now, thanks to "less -R", you can also specify JCOLOR=1, to
bring back color if whatever you pipe to can handle the escape sequences. You
should still use less(1) rather than more(1), because it enables paging up. Less
really is more :-)
08/07/13:
---------
08/09/13:
---------
dyldinfo assimilation is one step closer: Jtool now supports -data_in_code - and
also takes the DiC areas into account when disassembling (i.e. when using -d, you
will automatically see DCD ..... ; DATA_IN_CODE for these areas). This also makes
it rather useful when -d is piped to "grep DATA_IN_CODE".
08/16/13:
---------
08/18/13:
---------
- x86_64 disassemble still not supported, but other dumping features (cstrings,
cfstrings, etc) are. Also dump of strings now escapes \r \n, etc.
- Hack for objc_msgsend to show arguments in disassembly. Useful for debugging objc
binaries (such as iOS Apps). Still not where I want it to be, but constantly
improving.
01/19/13:
---------
01/22/13:
---------
- Fixed nasty bug with wrong sym/section for FAT file. Thanks to unnamed
developer from promising security company.
- jtool -v -l now prints permissions correctly
- jtool -d auto-dumps CStrings (and CFStrings) if the section they are in is
marked as such
02/07/13: v0.5
---------
02/25/13: v0.5.1
---------
03/15/13: v0.5.2
---------
- The -rC (remove load command #) option now enables you to remove load
commands. This is useful for stripping
code signatures, for example, or just plain malforming Mach-O Binaries.
- jtool -h -v now actually prints the Mach-O header flags!
- export JCOLOR=0 will disable color output, always (though IMHO colors are
great, for disassembly)
- Man page updated (do you people read this stuff?)
03/22:13: v0.6
---------
09/07/14: v0.7:
---------
09/21/14: v0.75:
---------
- -extract can now extract a file from a shared cache, like KennyTM's decache
(but with support for more load commands) AND 64-bit caches!
10/01/14: v 0.75.1
---------
minor fix to display page slots for code signing (thanks, duhanebel!)
10/04/14: v 0.76:
---------
10/12/14: v0.77:
---------
10/21/14: v0.78:
---------
- Added -opcodes with semantics for disassembly (that is, dump opcodes, like
otool's -j)
- Fixed bug resolving 64 bit symbols (would fail if STAB symbols were set,
like in AMFI.kext...)
- ARM64 branches handled
- Objective-C enhancements - can print category, protocol list and more (try -
d __DATA.__objc_...)
- Can now work directly on shared library cache - use
path_to_cache:fileInCache to specify
- will work with -l, not with -d or -S yet
11/25/14: v0.8
---------
- Massive fixes in dyldinfo like functionality, for 64-bit
- Can specify "all" for extract (i.e. jtool -extract all _path_to_dyld)
- ARM64 binaries now disassembled with call stubs (still working on
disassembly though)
- CFString dumping fixed for 64-bit binaries
- DYLD Bindings now correctly figured out including TIMES_ULEB (bleh!) and
SET_ADDEND_SLEB
- Fixed bug in FUNCTION_STARTS - now points to start of text, so -d can figure
out functions by start
- jtool -S should now be entirely indistinguishable (not just virtually
identical to) from nm
- Fix for cases where segment or section mapping is past file offset
- Corrected '-d -...' usage bug
01/30/15: v0.85
04/01/15: v0.86
- Tool made significantly faster (alas, still x5 times slower than otool.. But
at least not x70! And x5 is understandable, I guess, given more features)
- Now prints __TEXT.__cstring automatically. @TODO: do so by section flags,
not section reserved name
- jtool -L now does NOT print LC_ID_DYLIB - and only prints dependencies (in
this way it breaks compatibility with otool -L, but makes more sense - who wants to
see the library name itself repeated?!)
04/14/15: v0.88
04/20/15: v0.88a
05/13/15: v0.90
- Initial support for jtool companion file. Use --jtooldir . to create. Format
(for now) is address:Symbol
- Objective C class linking(!) -- done
06/27/15: v0.91
- Added "--slide" feature for experimental ASLR (and binary comparison between
TaiG versions)
- Vast improvements to HTML output (--html - try it "> out.html" and then open
in browser!)
- LDR/STR instructions fixed
- can now -d from symbols in companion file. Also fixed bug where -d would
treat symbols as addresses!
- Max # of load commands upped to 1024 (to handle core files), and
segments/sections to 1024/2048 respectively
08/04/15: v0.95
- Objective C!
- Specify class name as argument to "-d" to dump specific class by name
- objective-C methods in the Mach-O will automatically be symbolicated
- All this, *without* using libobjc.dylib - so you can use this in the Linux
version of the tool as well!
- Since this is experimental, NOOBJC=1 will disable these features (say, if
something crashes)
08/10/15: v0.95.L
08/14/15: v0.95.J
- Fix for John of BB - won't crash on iBooks (or any app with flat namespace
symbols) no more. Thank you!
- Fixed bug for disassembling till end of section - now does end of section,
not segment.
(Hey, reader - report bugs and your name will be commemorated here as
well!)
08/20/15: v0.9.6
09/07/15: v0.9.7
- Smarter, (and more colorful) dump (try -d __DATA.__const)
- Fixed ObjC dump bugs (try -d __DATA.__objc_data)
- Fixed --pages so as to not display regions which aren't mapped
(__DATA.__bss, __common)
- New option: -d objc : Dumps objc class list. Use -v to dump class
interfaces, too
09/17/15:
- LC_LINKER_OPTION now supported (Thanks to Claud Xiao!)
- support PRFM instruction 0xd9f9942b (Addr 00000001003a88f0 in
SpringBoard9 64 - take that, Otool!)
jtool -d dyld_shared_cache_arm64:UIKit
Fixed dumps in fat files. Had a bug not compensating for file start..
@TODO: still a bug on symbols in FAT
Note you don't need the full ...dylib of the framework, just a partial match
would do.
CBZ, CBNZ instructions fixed (show reg AND branch addr or symbol)
ARCH=x86_64h (for Haswell binaries) now supported (not much different than
x86_64..)
- JTool now follows block pointers, and displays the function in the block
- Code signature for ARM32 fixed
- Fixed max resolved values (strings) to allow up to 4k (locationd
__DATA.__const!) and snprintf, too.
- Fixed getter= in Obj-C classdump
- Need to fix crash on keynote
03/01/16 Penang
03/31/16 Cayman
- Better resilience in face of corrupted Mach-O headers (e.g. iOS 7.1 kernel
dump)
- Fixed -d with no arguments to go to actual __TEXT.__text, not start of
__TEXT. Makes it more accurate for kernel dumps
04/20/16 Ottawa
05/25/16 Copenhagen
06/02/16 Reykjavik
06/25/16 Shanghai
- Annoying ARM64 NOPs suppressed - so you can read code more fluently! Toggle
with NOPSUP=1
- Single NOPs just eliminated
- Longer sequences replaced with (%d NOPs suppressed)
- ANDS XZR, X%d, X%d is now correctly shown as TST
- When dumping a kext, look for kernelcache companion file as well :-)
- jtool --pages now gets -v to display size of each region in bytes
- fixed minor bug in dumping __DATA, where symbolicated addresses would also
appear as content.
- Will now refuse to dump any __TEXT sections when segment is marked
SG_PROTECTED
- automatically recognizes CFStrings in __DATA.__anywhere by address, not
just __DATA.__cfstring
- Can now get argument of .app, .framework or .kext (and will locate
corresponding binary!)
- SHA256 now detected and supported in Code Signatures (for Mac 10.12, but
apparently not yet iOS 10)
- Self referential branches (i.e. HALT) now printed as such. Useful for
KPP/iBoot
- Can now handle up to 16k segments (crazy, but necessary for core dumps..)
08/24/16: Singapore
09/23/16: Paris
- Officially dropped ARM32 support for disassembly. All other -d options work
well. (Siguza)
- Can now merge MOVZ/MOVK combinations into a MOVZK pseudo instruction if
adjacent and on same reg
(disable with NOMOVZK=1)
- Now prints "*" by pseudo instructions (e.g. MOVZK and Suppressed NOPs)
- "--str" undocumented but useful and convenient alias for "-d
__TEXT.__cstring"
- LC_MAIN/LC_UNIXTHREAD now prints 0x.. :-P
10/10/16: Gothenborg
- Search in binaries (-F _string_) improved
11/24/16: Shanghai
- Brought back ARMv7, (SLOWLY) for ARMv7k binaries, like WatchOS and the eOS,
because it's not going away and the new otool (objdump, seriously?!?) sucks. BAD.
12/25/16: Moscow
- Fixed Objc crash on null protocol and a bunch of other crashes that until
now necessitated NOOBJC=1.
jtool will now not crash if obj-C is malformed, but exit neatly and ask
you to REPORT THE BINARY so I can fix it.
(and you can still use NOOBJC=1 to work around obj-c related crashes, as
before)
- Now supports "-D", like "-d" but only shows lines jtool can decompile
successfully (like grep(1)-ing "^; ", but works when color is on)
04/25/17 DCA
05/15/2017 - SYD
07/11/2017 - London
09/01/2017 - HOME!
- Can dump addresses anywhere in the S/L/C!
- S/L/C disassembly is partially broken - I KNOW. It will be fixed.
AAPL has $%#$%$# UP the cache with their slide infos..
- SHA-256 signatures are now generated by default. (--sign sha1 if you need
old sigs)
- Code signature formats 0x20200 through 0x20400 (iOS11) now dumped with --
sig
- -dd now forces disassembly even on non-TEXT segments. Like disarm
- weak bind information in LC_DYLD_INFO now displayed in same manner as other
infos
09/20/2017 - Montreal
01/10/2017 - Gothenborg II
- Can now sign with team identifiers: --teamid ........ (will sign in 0x20200
format) - Thanks for the idea littlelailo!
01/12/2017 - Oslo
01/20/2018 - v1.0
03/14/2018 - (Amsterdam)
======================================================
@TODO: (still)
------
- get dlsym and dlopen to be of type T_FUNC and get addr of a symbol so known
Funcs would work
- cache stubs!!
- differentiate between func symbols and normal labels in companion file,not by
"^_"
3/28
- todo: jtool -a to get closest symbol and work on all segments
- Make it so that jtool still parses FUNCTION STARTS even without a symbol file,
so jtool -d _func... | grep BL works!
-
FIX:::::
jtool -d __DATA_CONST.__const dyld_shared_cache_arm64:libsystem_trace |more
strings in fat files (getFileStart()) - and other bugs like on UEA plugins
REFACTORING:
------------